我正在尝试创建一个具有相当复杂UI的应用。 我试图了解在屏幕上呈现不规则按钮形状的最佳做法是什么。
我正在添加此图片作为示例。这些木板中的每一个都是一个按钮。 我显然不能使用Android的Button或ImageButton,因为形状不是矩形。
我假设我需要将它直接绘制到画布上或使用onDraw或Draw来实现这一点。 这是我用来将这些作为按钮渲染的正确方法吗? 关于这些的任何好的阅读材料都非常感谢..
谢谢
答案 0 :(得分:1)
您可以按以下方式创建自定义视图:
onDraw()
中绘制3个位图,每个位图代表单个按钮(其他2个按钮是透明的),onTouch()
中检查触摸的像素与这些位图,看看点击了哪个位图代码段:
public class DrawingBoard extends View {
Bitmap mBitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.button1);
Bitmap mBitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.button2);
Bitmap mBitmap3 = BitmapFactory.decodeResource(getResources(), R.drawable.button3);
public DrawingBoard (Context context) {
// TODO Auto-generated constructor stub
super (context);
}
@Override
protected void onDraw (Canvas canvas) {
canvas.drawBitmap(mBitmap1, 0, 0, null);
canvas.drawBitmap(mBitmap2, 0, 0, null);
canvas.drawBitmap(mBitmap3, 0, 0, null);
}
@Override
public boolean onTouchEvent (MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN :
int xx = (int)event.getX();
int yy = (int)event.getY();
if(Color.alpha(mBitmap1.getPixel(xx,yy)) != 0) {
// button1 pressed
}
else if(Color.alpha(mBitmap2.getPixel(xx,yy)) != 0) {
// button2 pressed
}
else if(Color.alpha(mBitmap3.getPixel(xx,yy)) != 0) {
// button3 pressed
}
break;
}
return true;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
// bitmaps are assumed to be of the same size
setMeasuredDimension(mBitmap1.getWidth(),mBitmap1.getHeight());
}
}
我没有测试代码,它可能有错误。
变体 - 您可以创建一个存储'命中代码的虚拟位图。对于整个图像上的像素。您可以从原始图片创建它,但用ids替换像素以检测触摸了哪个区域,所有其他像素使得空白' (为0x0)。所以getPixel()将返回一个按钮的id。