gpt4 book ai didi

android - 如何使用 Canvas 制作位图可点击?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:35 24 4
gpt4 key购买 nike

如何使创建的位图可点击?下面是我用来使用 Canvas 创建位图的代码。

 public class DrawView extends View implements OnClickListener
{
public DrawView(Context context)
{
super(context);
paint = new Paint();
image = BitmapFactory.decodeResource(getResources(), R.drawable.andmrktsmall);
}

@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
int canWidth = canvas.getWidth();
int canHeight = canvas.getHeight();
int width = (canWidth - 200) / 2;
int height = (canHeight - 100) / 2;
Bitmap indexcanvas = Bitmap.createScaledBitmap(image, 200, 100, true);
canvas.drawBitmap(indexcanvas, width, height, paint);
this.setBackgroundColor(Color.YELLOW);

}

@Override
public void onClick(View v)
{
Toast.makeText(context, "View is clicked", 1).show();
}

}

最佳答案

通过在此 View 上设置一个 OnClickListener,所有 View 都将是可单击的(但不限于您的位图)。要检查用户是否仅单击了位图本身,您必须重写 onTouchEvent(MotionEvent event) 并检查触摸坐标是否与位图相同。

@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
//Check if the x and y position of the touch is inside the bitmap
if( x > bitmapXPosition && x < bitmapXPosition + bitmapWidth && y > bitmapYPosition && y < bitmapYPosition + bitmapHeight )
{
//Bitmap touched
}
return true;
}
return false;
}

只需将 bitmapXPosition 和 bitmapYPosition 替换为您用来绘制位图的坐标,将 bitmapWidth 和 bitmapHeight 替换为您用来绘制位图的宽度和高度。

此外,尽量不要在任何 View 的 onDraw() 方法内部分配内存(创建对象)。这对性能不利。

编辑

private Rect r;
private Paint paint;
Bitmap bitmap;

public TestRect(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
paint = new Paint();
paint.setColor(Color.BLUE);
r = new Rect();
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
}

public TestRect(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
paint.setColor(Color.BLUE);
r = new Rect();
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
}

public TestRect(Context context) {
super(context);
paint = new Paint();
paint.setColor(Color.BLUE);
r = new Rect();
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
}

@Override
public void onDraw(Canvas c)
{

r.set(getWidth()/2, getHeight()/2, getWidth()/2 + 200, getHeight()/2 + 200);
//c.drawRect(r, paint);
c.drawBitmap(bitmap, null, r, paint);
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
//Check if the x and y position of the touch is inside the bitmap
if( x > getWidth()/2 && x < getWidth()/2 + 200 && y > getHeight()/2 && y < getHeight()/2 + 200 )
{
Log.e("TOUCHED", "X: " + x + " Y: " + y);
//Bitmap touched
}
return true;
}
return false;
}

通过使用 Rect 作为坐标绘制位图,您可以检查触摸是否在位图中。此外,您可以使用

if(r.contains(x, y))
{
//BITMAP TOUCHED
}

关于android - 如何使用 Canvas 制作位图可点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18826808/

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