gpt4 book ai didi

android - 呈现不规则按钮形状 - 最佳实践

转载 作者:行者123 更新时间:2023-11-30 02:15:23 25 4
gpt4 key购买 nike

我正在尝试创建一个具有相当复杂 UI 的应用程序。我试图了解在屏幕上呈现不规则按钮形状的最佳做法是什么。

我添加这张图片作为示例。这些木板中的每一个都是一个按钮。我显然不能使用 Android 的 Button 或 ImageButton,因为形状不是矩形。

我假设我需要将其直接绘制到 Canvas 上或使用 onDraw 或 Draw 来实现。这是我应该用来将它们呈现为按钮的正确方法吗?非常感谢关于这些的任何好的阅读 Material ..

谢谢

enter image description here

最佳答案

您可以按以下方式创建自定义 View :

  1. onDraw() 中绘制 3 个位图,每个代表一个按钮(其中 2 个其他按钮是透明的),
  2. onTouch() 中对照那些位图检查触摸的像素以查看哪个位图被点击

代码 fragment :

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());
}
}

我没有测试代码,它可能有错误。

一个变体 - 您可以创建一个虚拟位图,为整个图像上的像素存储“命中代码”。您可以从原始图片创建它,但用 id 替换像素以检测哪个区域被触摸,所有其他像素为“空”(0x0)。所以 getPixel() 将返回按钮的 ID。

关于android - 呈现不规则按钮形状 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29455668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com