2015-12-25 23 views
12

各ビュー間に水平線を含むテキストビューをプログラムで作成しています。プログラムで作成されたドロウアブルを使用する。不透明度が増分され、不透明度が一定であることを望む画像ビュー

問題は、不透明度が明るくなり、各行で徐々に増加することです。

drawable、paint、image view、linear layoutの不透明度(getAlpha())は、提供されている2つのメソッドのすべての点でログに記録されています。私はなぜこれが真実であるかのように振る舞わない理由を理解していません。私もアルファを設定しようとしましたが、違いはありません。

なぜこれを行うのですか、どのように修正しますか?

の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

答えて

11

はエミュレータでより多くのいくつかの問題のように見えます。また、あなたはちょうどTextViewの間で分圧器を描画するために、新しいImageView毎回インスタンス化する必要はありません心の中でも、保管してください

ll.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

でハードウェアアクセラレーションを無効にしてみてください。 setDividerを使うことができます。例えば。あなたの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); 

、あなたがボタンを押したときに

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

結果は、このために

enter image description here

+0

おかげです。私はエミュレータを考えなかった。 –

+0

ちょうどそれを電話でテストしても問題ありません。期間が満了したときに賞金を授与します。もしあなたがもう少し票を得たらうれしいです。 –

+0

ようこそ – Blackbelt

関連する問題