我无法在Android触摸事件上获得正确的手指位置

时间:2014-02-05 10:28:57

标签: java android position touch draw

我在ImageView上的onTouch事件上抓取手指的位置时遇到问题。基本上我得到手指触摸的位置,然后我开始绘制一条线,但我绘制它的位置与我的触摸位置有很大不同。我把我的代码解释了一下:

首先,我使用此方法获取触摸位置:

 public boolean onTouch(View view, MotionEvent event) {

    if (first == true)
    {
        x = event.getX();
        y = event.getY();

        Toast.makeText(getApplicationContext(), String.valueOf(x) + " " + String.valueOf(y), Toast.LENGTH_LONG).show();

        first = false;
    }
    else
    {
        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();         
    }
}   

我在btnMove_Click代码上收到的X和Y值与onTouch事件上的值相同,但行位置不同。 (通过点击绘制时的线位置得到“坏”的X和Y位置)

我得到的结果是下一个:

  1. 第一:
    • 我用手指触摸时的X和Y值:X = 572 Y = 389
    • 绘制线时的X和Y值:X = 648 Y = 370
  2. 第二:
    • 用手指触摸时的X和Y值:X = 648 Y = 370
    • 绘制线时的X和Y值:X = 704 Y = 348
  3. 第三:
    • 我用手指触摸时的X和Y值:X = 270 Y = 228
    • 绘制线时的X和Y值:X = 435 Y = 250。
  4. 我的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"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
        <RelativeLayout
            android:id="@+id/relativeLayout1"
            android:layout_width="800px"
            android:layout_height="564px"
            android:layout_alignParentLeft="true" >
    
            <ImageView
                android:id="@+id/imgFingerPaint"
                android:layout_width="800px"
                android:layout_height="564px"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
                android:src="@drawable/edittext_rounded_corners" />
        </RelativeLayout>
    </RelativeLayout>
    

    谢谢!

    编辑:另外我看到Image中的ImageView比设计视图中的小,我不知道为什么。如果我在imageView的右边缘附近做了触摸事件,那么X和Y的误差小于我在左边的其他位置的误差。

0 个答案:

没有答案