2

リスト アダプターのテキスト ビューに描画可能な背景を適用しようとしています。私はxmlで次のように定義された描画可能な背景を持っています

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
   <solid android:color="@color/black" />
   <stroke android:width="1dip" android:color="#ffffff"/>
</shape>

アクティビティでこの描画可能な要素を次のように取得します

Drawable mDrawable = mContext.getResources().getDrawable(R.drawable.back); 

そして今、背景も変更したい16進コードのさまざまな文字列がありますが、その方法がわかりません。カラーフィルターか何か?

4

1 に答える 1

2

1 つのアプローチは次のとおりです。

 public class MyDrawable extends ShapeDrawable{

            private Paint mFillPaint;
            private Paint mStrokePaint;
            private int mColor;

            @Override
            protected void onDraw(Shape shape, Canvas canvas, Paint paint) {
                shape.drawPaint(mFillPaint, canvas);
                shape.drawPaint(mStrokePaint, canvas);
                super.onDraw(shape, canvas, paint);
            }

            public MyDrawable() {
                super();
                // TODO Auto-generated constructor stub
            }
            public void setColors(Paint.Style style, int c){
                mColor = c;
                if(style.equals(Paint.Style.FILL)){
                    mFillPaint.setColor(mColor);                    
                }else if(style.equals(Paint.Style.STROKE)){
                    mStrokePaint.setColor(mColor);
                }else{
                    mFillPaint.setColor(mColor);
                    mStrokePaint.setColor(mColor);
                }
                super.invalidateSelf();
            }
            public MyDrawable(Shape s, int strokeWidth) {
                super(s);
                    mFillPaint = this.getPaint();
                    mStrokePaint = new Paint(mFillPaint);
                    mStrokePaint.setStyle(Paint.Style.STROKE);
                    mStrokePaint.setStrokeWidth(strokeWidth);
                    mColor = Color.BLACK;
            }

        }

使用法:

MyDrawable shapeDrawable = new MyDrawable(new RectShape(), 12);
//whenever you want to change the color
shapeDrawable.setColors(Style.FILL, Color.BLUE);

または、Drawable を にキャストする 2 番目のアプローチを試して、ShapeDrawable別のものを作成し、次のPaintように設定します。castedShapeDrawable.getPaint().set(myNewPaint);

于 2013-08-28T02:19:23.697 に答える