Android 如何制作背景形状的按钮
我只想要一个背景形状的按钮 例如,我有这样的图像:Android 如何制作背景形状的按钮,android,button,background,shape,Android,Button,Background,Shape,我只想要一个背景形状的按钮 例如,我有这样的图像: 我把它作为一个ImageButton的背景我想要的是按钮的形状是一样的,而不是保持矩形。您可以扩展视图类,在onSizeChanged中为图像定义闭合路径(使用实体部分和数学的边界以及视图的宽度和高度),并覆盖其onTouch,以仅响应位于上述闭合路径中的触摸。因此,最终您将能够实现您想要的行为。虽然Virendra Singh的答案是正确的,但我觉得在一般情况下使用路径可能太难了 要处理所有情况,您需要进行逐像素测试。每像素测试绘制视图并测
我把它作为一个ImageButton的背景我想要的是按钮的形状是一样的,而不是保持矩形。您可以扩展视图类,在
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);
}
}