1

我在 android 中以编程方式将图层列表设置为具有可绘制性的图像视图

我的自定义 Drawable 如下,

package cl.tk.ui.iBAPView;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;

import cl.tk.R;

public class CircleDrawable extends Drawable {

private int color;
private boolean checked = false;
private int size;
private Paint paint= new Paint(Paint.DITHER_FLAG);
private Context context;

public CircleDrawable(Context context,boolean checked,int color,int size) {
    this.checked=checked;
    this.color=color;
    this.size=size;
    this.context=context;
}

@Override
public void draw(Canvas canvas) {
    paint.setAntiAlias(true);
    paint.setFilterBitmap(true);
    paint.setDither(true);
    canvas.drawARGB(0, 0, 0, 0);

    paint.setColor(color);
    canvas.drawCircle(size/ 2, size / 2,size / 2, paint);

    if (checked)
        drawChecked(canvas);
}

private void drawChecked(Canvas canvas) {
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_check);

    float posX = (canvas.getWidth()  - bitmap.getWidth()) / 2;
    float posY = (canvas.getHeight() - bitmap.getHeight()) / 2;
    canvas.drawBitmap(bitmap, posX, posY, paint);
}

@Override
public void setAlpha(int alpha) {
    // do nothing
}

@Override
public void setColorFilter(ColorFilter cf) {
    // do nothing
}

@Override
public int getOpacity() {
    return PixelFormat.UNKNOWN;
}

}

这是我创建图层列表drawable并将其设置为imageview的代码,

  public static void setChecked_Selector(Context context,ImageView view) {
    try {
        int size= (int) context.getResources().getDimension(R.dimen._17sdp);
       /* Drawable pressed=squareView(ContextCompat.getColor(context,R.color.colorBlue),ContextCompat.getColor(context,R.color.colorRed),size);//new BadgeDrawable(context,colorPressed);
        Drawable normal=squareView(ContextCompat.getColor(context,R.color.colorwhite),ContextCompat.getColor(context,R.color.colorRed),size);*/
        Drawable pressed=new CircleDrawable(context,true,ContextCompat.getColor(context,R.color.colorGreen),size);
        Drawable normal=new CircleDrawable(context,false,ContextCompat.getColor(context,R.color.colorGray),size);

        Drawable[] drawarray = {pressed, normal};
        LayerDrawable layerdrawable = new LayerDrawable(drawarray);
        view.setBackgroundDrawable(layerdrawable);
        view.setImageLevel(0);
        view.setTag(0);
    } catch (Exception e) {
    }
}

在单击 imageview 时,我正在尝试更改可绘制对象但失败了,因为条件运行良好但图层列表可绘制对象没有改变,

我在 imageView 的点击监听器上的代码,

case R.id.ah_img_agree:
        {
            int imageLevel=-1;
            if(0==(int)v.getTag())
                imageLevel=1;
            else
                imageLevel=0;
            ((ImageView)v).setImageLevel(imageLevel);
            rbAgreed.setTag(imageLevel);
        }
        break;
4

0 回答 0