我有一个图像,我想在图像上做一个8点,这个点在触摸点和拖动到屏幕上时是移动的,这有可能在图像上做那种触摸和移动的点吗?
在8点上显示上面的图像,我想得到这样的结果,当你触摸到那个点时,那个点是移动的,在图像上移动,也要那个点的x,y坐标。
我尝试了下面的代码,但它的显示点的形式不正确,所有的点在同一时间移动。
class DrawingView extends View {
Bitmap bitmap;
float x, y;
public DrawingView(Context context) {
super(context);
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_dot);
}
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
}
break;
case MotionEvent.ACTION_MOVE: {
x = (int) event.getX();
y = (int) event.getY();
invalidate();
}
break;
case MotionEvent.ACTION_UP:
x = (int) event.getX();
y = (int) event.getY();
System.out.println(".................." + x + "......" + y); //x= 345 y=530
invalidate();
break;
}
return true;
}
@Override
public void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
// canvas.drawBitmap(bitmap, x, y, paint); //originally bitmap draw at x=o and y=0
for (int i = 0; i < 8; i++) {
canvas.drawBitmap(bitmap, x++, y++, null);
}
}
}
如果有人知道这种类型的视图或任何解决方案,请提供帮助。
提前感谢:)
1条答案
按热度按时间huwehgph1#
创建自定义
ImageView
延伸了androidx.appcompat.widget.AppCompatImageView
类,该类实现OnTouchListener
带着一个ArrayList<Dot>
它将跟踪Dot
s。你重写了吗
onDraw(Canvas canvas)
风俗习惯ImageView
并遍历ArrayList
的Dot
一个接一个地画Dot
在列表中使用canvas.drawCircle(float cx, float cy, float radius, @NonNull Paint paint)
.无论何时
MotionEvent.ACTION_DOWN
如果你检查触摸是否在现有的点内。如果是你设定的
Dot
全局变量,即。touchedDot
,当用户移动时OnTouchListener
火灾MotionEvent.ACTION_MOVE
然后检查一下touchedDot != null
如果是这样的话,简单地改变一下x
以及y
通过touchedDot.x = event.getX()
以及touchedDot.y = event.getY()
然后打电话invalidate()
这就叫ImageView
sonDraw
方法,点将随着用户手指的移动而移动。当用户从触摸或移动中抬起手指时,MotionEvent.ACTION_UP
如果你被解雇了,你只要检查一下touchedDot == null
如果是这样,那么你就创建一个新的Dot
在x
以及y
他们进来了,否则你就进去了touchedDot = null
为下一个移动或触摸事件重置。下面是我使用毕加索创建的一个示例,用于将图像加载到自定义
ImageView
:内部版本.gradle:
androidmanifest.xml:
drawabledotimageview.java文件:
testframent.xml:(根据自己的需要更改包名)
testframent.java测试框架:
产生: