2015-12-25 6 views
12

Ich programmiere Textansichten mit horizontalen Linien zwischen den einzelnen Ansichten. Verwenden eines programmgesteuert erstellten ZeichensatzesInkrementelle Deckkraft, konstante Deckkraft gewünscht Bildansicht mit Drawable

Das Problem ist, die Opazität beginnt Licht und allmählich für jede Zeile erhöht.

Ich habe die Deckkraft (getAlpha()) der Zeichen-, Mal-, Bildansicht und linearen Layout an allen Punkten in den beiden Methoden geloggt und von den Zeichenvorlagen ist es immer 255 und die Ansichten 1.0. Ich verstehe nicht, warum es sich nicht so verhält, als ob das wahr wäre. Ich habe auch versucht Alpha einzustellen, es macht keinen Unterschied.

Warum macht es das und wie repariere ich es?

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

Antwort

11

Für mich wie mehr einige Probleme mit dem Emulator sieht. Sie könnten auch versuchen, die Hardwarebeschleunigung deaktivieren mit

ll.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

Bitte beachten Sie auch, dass Sie nicht brauchen eine neue ImageView jedes Mal zu instanziiert, nur einen Teiler zwischen den TextView s zu ziehen. Sie könnten setDivider verwenden. Z.B.

In Ihrem 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); 

und wenn Sie die

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); 
} 

das Ergebnis ist

enter image description here

+0

Vielen Dank für diese Taste drücken. Ich habe nicht an den Emulator gedacht. –

+0

Habe es gerade an einem Telefon getestet und es ist in Ordnung. Wird Bounty vergeben, wenn die Frist abgelaufen ist, werden Sie hoffentlich noch mehr Stimmen bekommen. –

+0

sind Sie willkommen – Blackbelt

Verwandte Themen