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

}

}

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部