android 重置画布,android-自定义视图:重按视图画布

多亏了pskink,我才能够创建完整的解决方案.

如果要创建自定义视图,其中必须是针对不同触摸状态(按下,选定,聚焦等)的自定义工程图,并且您不知道此视图是否将放置在其他可以拦截触摸事件的视图中,或者视图结构更加困难.您应该实现以下行为

>创建自定义Drawable

>在覆盖方法isStateful()中返回真值(需要保持不同的状态)

>覆盖onStateChange方法,如果状态已更改,则调用invalidateSelf().

>覆盖draw方法以基于drawableState实现自定义绘图(请参见getState方法)

>应该绘制可绘制对象的自定义视图覆盖方法(例如setImageDrawable,setBackground …取决于您的需要)

>在带有自定义Drawable类的方法调用supermethod中

例:

public class CircularImageView extends ImageView{

@Override

public void setImageDrawable(Drawable drawable) {

super.setImageDrawable(new CustomDrawable(

((BitmapDrawable)drawable).getBitmap()));

}

protected class CustomDrawable extends Drawable {

//

private Bitmap bitmap;

public CustomDrawable(Bitmap bitmap){

this.bitmap = bitmap;

}

@Override

public boolean isStateful() {

// always return true

return true;

}

@Override

public int getOpacity() {

// see documentation on android developers site

return PixelFormat.OPAQUE;

}

@Override

public void setColorFilter(ColorFilter colorFilter) {

}

@Override

public void setAlpha(int i) {

}

boolean pressed = false;

@Override

protected boolean onStateChange(int[] states) {

// simplified but working

for (int state : getState()){

if (state == android.R.attr.state_pressed ||

state == android.R.attr.state_focused)

pressed = true;

else pressed = false;

}

invalidateSelf();

return true;

}

@Override

public void draw(Canvas canvas) {

// very simplified example

canvas.drawBitmap(bitmap,0,0,paint);

circlePaint.setColor(pressed ? colorActive : colorPassive);

canvas.drawCircle(0, 0, 100, 100);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值