【发布时间】:2017-07-10 21:18:05
【问题描述】:
【问题讨论】:
标签: android button background shape
【问题讨论】:
标签: android button background shape
由 android 设计的 AFAIK 所有视图都是矩形的。您可以扩展视图类,在onSizeChanged 中为图像定义闭合路径(使用实体部分的边界和数学以及视图的宽度和高度)并覆盖其onTouch 以仅响应落在闭合路径中的触摸定义如上。所以最终你将能够实现你想要的行为。
【讨论】:
虽然 Virendra Singh 的回答是正确的,但我觉得在一般情况下使用路径可能太难了。
要处理所有情况,您需要进行每像素测试。每像素测试绘制视图并测试触摸的像素是否可点击。代码很短:
public class BitmapButton extends Button {
private final Bitmap bitmap;
private final Canvas canvas;
public BitmapButton(Context context, AttributeSet attrs) {
super(context, attrs);
bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
}
public boolean onTouchEvent(MotionEvent event) {
bitmap.setPixel(0, 0, 0); // reset pixel
canvas.save();
canvas.translate(-event.getX(), -event.getY());
draw(canvas); // draw only the touched pixel
canvas.restore();
// pass touch events when the pixel is clickable
return Color.alpha(bitmap.getPixel(0, 0)) > 0 && super.onTouchEvent(event);
}
}
【讨论】: