android 重置画布,android-自定义视图:重按视图画布
多虧了pskink,我才能夠創(chuàng)建完整的解決方案.
如果要?jiǎng)?chuàng)建自定義視圖,其中必須是針對(duì)不同觸摸狀態(tài)(按下,選定,聚焦等)的自定義工程圖,并且您不知道此視圖是否將放置在其他可以攔截觸摸事件的視圖中,或者視圖結(jié)構(gòu)更加困難.您應(yīng)該實(shí)現(xiàn)以下行為
>創(chuàng)建自定義Drawable
>在覆蓋方法isStateful()中返回真值(需要保持不同的狀態(tài))
>覆蓋onStateChange方法,如果狀態(tài)已更改,則調(diào)用invalidateSelf().
>覆蓋draw方法以基于drawableState實(shí)現(xiàn)自定義繪圖(請(qǐng)參見getState方法)
>應(yīng)該繪制可繪制對(duì)象的自定義視圖覆蓋方法(例如setImageDrawable,setBackground …取決于您的需要)
>在帶有自定義Drawable類的方法調(diào)用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);
}
}
}
總結(jié)
以上是生活随笔為你收集整理的android 重置画布,android-自定义视图:重按视图画布的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡被拒后多久重申
- 下一篇: Android实现相册分享功能,Andr