【问题标题】:Android is drawing on a wrong position of imageViewAndroid 在 imageView 的错误位置上绘图
【发布时间】:2014-02-06 11:48:03
【问题描述】:

我想在手指触摸屏幕给定的位置绘制一个矩形,但是当我单击按钮进行绘制时,矩形的位置是错误的,右侧和上方有很多像素。我发布了代码和我的 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>

当我进行一些触摸事件和一些绘制事件时我的屏幕图像:

【问题讨论】:

  • 给定图像的手机方向是什么?另外,pixelFoot 是什么?它从何而来?
  • 不要把错误归咎于安卓:是你站错了位置
  • @dev_feed 方向是“横向”,pixelFoot 是一个变量,我从另一个活动中接收并获取一个步幅的像素距离。
  • @pskink 我知道这是我的错,它只是一个标题文本。

标签: java android location draw touch-event


【解决方案1】:

所以上述解决方案并没有帮助我解决同样的问题,但有趣的是,当我将“event.getX()”乘以 4 时,它是完全正确的;这更像是治疗副作用,需要更多研究来了解原因。

【讨论】:

    【解决方案2】:

    我找到了解决方案!画布的宽度和高度与 imageView 不同,因此当我触摸屏幕时,画布和 imageView 的点位置不同。修复它,使其具有相同的宽度和高度!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-03
      • 2015-01-26
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多