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);
}
}
}
總結
以上是生活随笔為你收集整理的android 重置画布,android-自定义视图:重按视图画布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡被拒后多久重申
- 下一篇: 手机用鸿蒙,魅族“很聪明”:宣布加入鸿蒙