[英]Android is drawing on a wrong position of imageView
我想在用手指触摸屏幕的位置上绘制一个矩形,但是当我单击按钮进行绘制时,该矩形的位置是错误的,右侧和上方的像素很多。 我发布了代码和xml布局文件,还给出了“触摸事件”和此触摸事件的“矩形位置”的图像,这是在ADV仿真器上捕获的imageView。
OnTouch事件:
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_UP:
{
x = event.getX();
y = event.getY();
/*int[] img_coordinates = new int[2];
imageView.getLocationOnScreen(img_coordinates);
Toast.makeText(getApplicationContext(), String.valueOf(img_coordinates[0]) + " " + String.valueOf(img_coordinates[1]), Toast.LENGTH_LONG).show();
x = x - img_coordinates[0];
y = y - img_coordinates[1];*/
Toast.makeText(getApplicationContext(), String.valueOf(x) + " " + String.valueOf(y), Toast.LENGTH_LONG).show();
imageView.invalidate();
break;
}
case MotionEvent.ACTION_MOVE:
{
if (event.getHistorySize() == 0)
{
x = event.getX();
y = event.getY();
}
if (x == 0 && y == 0)
{
x = event.getX();
y = event.getY();
}
canvas.drawLine(x, y, event.getX(), event.getY(), paint);
x = event.getX();
y = event.getY();
imageView.invalidate();
}
}
return true;
}
绘画活动:
public void btnMove_Click(View view)
{
if(orientation == "UP")
{
canvas.drawLine(x, y, x, y - pixelFoot, paint);
Toast.makeText(getApplicationContext(), "Dibujado en " + String.valueOf(x) + " " + String.valueOf(y), Toast.LENGTH_LONG).show();
y -= pixelFoot;
imageView.invalidate();
}
else if(orientation == "DOWN")
{
canvas.drawLine(x, y, x, y + pixelFoot, paint);
Toast.makeText(getApplicationContext(), "Dibujado en " + String.valueOf(x) + " " + String.valueOf(y), Toast.LENGTH_LONG).show();
y += pixelFoot;
imageView.invalidate();
}
else if(orientation == "LEFT")
{
canvas.drawLine(x, y, x - pixelFoot, y, paint);
Toast.makeText(getApplicationContext(), "Dibujado en " + String.valueOf(x) + " " + String.valueOf(y), Toast.LENGTH_LONG).show();
x -= pixelFoot;
imageView.invalidate();
}
else if(orientation == "RIGHT")
{
canvas.drawLine(x, y, x + pixelFoot, y, paint);
Toast.makeText(getApplicationContext(), "Dibujado en " + String.valueOf(x) + " " + String.valueOf(y), Toast.LENGTH_LONG).show();
x += pixelFoot;
imageView.invalidate();
}
}
XML布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/imgFingerPaint"
android:layout_width="800px"
android:layout_height="564px"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/Button01"
android:src="@drawable/edittext_rounded_corners" />
<Button
android:id="@+id/btnMove"
android:layout_width="90px"
android:layout_height="90px"
android:layout_alignParentBottom="true"
android:layout_alignTop="@+id/btnRight"
android:layout_toRightOf="@+id/btnRight"
android:background="@drawable/edittext_rounded_corners"
android:onClick="btnMove_Click"
android:text="PASO" />
</RelativeLayout>
当我进行一些触摸事件和一些绘制事件时屏幕的图像:
我找到了解决方案! 画布的宽度和高度与imageView的宽度和高度不同,因此,当我触摸屏幕时,画布和imageView的点位置是不同的。 修复它以提供相同的宽度和高度!
因此,上述解决方案并没有帮助我解决同一问题,但是有趣的是,当我将“ event.getX()”乘以4时,这是完全正确的; 这更像是对副作用的治疗,为什么需要更多的研究。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.