2015-12-25 12 views
12

Programowo tworzę widoki tekstu z poziomymi liniami pomiędzy poszczególnymi widokami. Używanie programowalnych kreacji.Przyrostowe krycie, chcąc uzyskać stałe krycie Widok obrazu z ciągniętym

Problem polega na tym, że krycie zaczyna świecić światłem i stopniowo wzrasta dla każdej linii.

Zrobiłem krycie (getAlpha()) z rysowania, malowania, widoku obrazu i układu liniowego we wszystkich punktach z dwóch podanych metod, a z rysunków zawsze jest 255 i widoków 1.0. Nie rozumiem, dlaczego nie zachowuje się tak, jakby to była prawda. Próbowałem też ustawić Alpha, to nie robi różnicy.

Dlaczego to robi i jak mogę to naprawić?

xml:

<LinearLayout android:id="@+id/main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" .../> 

    <Button android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="PaintDashedLines" 
     android:text="Press Me"/> 
</LinearLayout> 

Java:

static int tvCount = 0; 

public void PaintDashedLines(View v) { 
    LinearLayout ll = (LinearLayout) findViewById(R.id.main); 
    TextView tv = new TextView(MainActivity.this); 
    tv.setGravity(Gravity.CENTER); 
    tv.setTextSize(25); 
    tv.setPadding(0, 5, 0, 5); 
    ll.addView(tv); 
    tv.setText("TextView " + tvCount); 
    ImageView divider = new ImageView(MainActivity.this); 
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
      ll.getWidth(), 2); 
    lp.setMargins(0, 5, 0, 5); 
    divider.setLayoutParams(lp); 
    divider.setBackground(CreateDashedLined()); 
    ll.addView(divider); 
    tvCount++; 
} 

public static Drawable CreateDashedLined() { 
    ShapeDrawable sd = new ShapeDrawable(new RectShape()); 
    Paint fgPaintSel = sd.getPaint(); 
    fgPaintSel.setColor(Color.BLACK); 
    fgPaintSel.setStyle(Paint.Style.STROKE); 
    fgPaintSel.setPathEffect(new DashPathEffect(new float[]{5, 10}, 0)); 
    return sd; 
} 

enter image description here

Odpowiedz

11

Dla mnie wygląda bardziej jakiś problem z emulatora. Można również spróbować wyłączyć akcelerację sprzętową z

ll.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

Proszę zachować również pamiętać, że nie trzeba do wystąpienia nowego ImageView za każdym razem, po prostu narysować dzielnik między TextView s. Możesz użyć setDivider. Na przykład.

W swojej onCreate

ShapeDrawable sd = new ShapeDrawable(new RectShape()); 
sd.setIntrinsicHeight(1); 
Paint fgPaintSel = sd.getPaint(); 
fgPaintSel.setARGB(255, 0, 0, 0); 
fgPaintSel.setStyle(Paint.Style.STROKE); 
fgPaintSel.setPathEffect(new DashPathEffect(new float[]{5, 10}, 0)); 

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.main); 
linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE | LinearLayout.SHOW_DIVIDER_END); 
linearLayout.setDividerDrawable(sd); 

i po naciśnięciu przycisku

public void pressMe(View view) { 
    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.main); 
    TextView tv = new TextView(MainActivity.this); 
    tv.setGravity(Gravity.CENTER); 
    tv.setTextSize(25); 
    tv.setPadding(0, 5, 0, 5); 
    tv.setText("TextView " + linearLayout.getChildCount()); 
    linearLayout.addView(tv); 
} 

wynik jest

enter image description here

+0

Dzięki za to. Nie myślałem o emulatorze. –

+0

Właśnie przetestowałem to na telefonie i wszystko jest w porządku. Nagradza nagrodę, gdy minie termin, miejmy nadzieję, że dostaniesz więcej głosów. –

+0

nie ma za co – Blackbelt

Powiązane problemy