2014-02-06 2 views
0

Я хочу нарисовать прямоугольник в позиции, приложив его пальцем, касаясь экрана, но когда я нажимаю на кнопку рисования, расположение прямоугольника ошибочно, во многие пиксели справа и вверх. Я размещаю код и мой файл макета xml, также я даю и изображение «события касания» и «местоположения прямоугольника» этого события касания, это захват моего изображенияView на эмуляторе ADV.Android использует неправильное положение 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 Layout File:

<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> 

Изображение моего экрана, когда я делаю некоторые события прикосновения и некоторые события рисования : Image of my screen when I make some touch events and some draw events:

+0

Какова была ориентация вашего телефона на данный образ? Кроме того, что такое pixelFoot и откуда оно взялось? –

+0

dont винить android за ваши недостатки: его вы нарисовали на неправильных позициях – pskink

+0

@dev_feed ориентация - это «пейзаж», pixelFoot - это переменная, которую я получаю от другого действия и получаю расстояние до одного шага. – Imrik

ответ

0

Я нашел решение! Холст имел разную ширину и высоту, чем изображение, поэтому место точки, когда я касаюсь экрана, было разным для холста и для изображения. Исправьте его, давая ту же ширину и высоту!

Смежные вопросы