2017-06-05 115 views
0

我想构建一个具有imageview的应用程序,它只是简单地遵循手指触摸。换句话说,imageview会跟随手指的触摸。我已经部分实现了这一点,因为imageview是在跟随手指的触摸,但问题在于它有一些偏移。 imageview大约一英寸的实际触摸。Imageview不跟随手指触摸

下面是我的代码:

public class MainActivity extends AppCompatActivity { 

ImageView img; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    img = (ImageView)findViewById(R.id.img1); 
    img.setImageResource(R.drawable.ic_remove_circle_black_24dp); 
} 
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    img.setX(event.getX()); 
    img.setY(event.getY()); 
    return false; 
} 

}

可能是什么背后的偏移的原因吗?

编辑:解

下面的代码做什么,我需要:

public class MainActivity extends AppCompatActivity { 

    ImageView img; 
    int[] viewCoords = new int[2]; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     img = (ImageView)findViewById(R.id.img1); 
     img.setImageResource(R.drawable.ic_remove_circle_black_24dp); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event){ 
     img.getLocationOnScreen(viewCoords); 
     img.setX(event.getX()-(viewCoords[0]-img.getX())); 
     img.setY(event.getY()-(viewCoords[1]-img.getY())); 
     return true; 

    } 
} 

感谢Doomsknight的方向。

回答

0

从我所看到的,您正在使用屏幕的触摸事件的X和Y坐标。

然后在ImageView的X和Y上绘制此坐标。

这会导致您看到的偏移量,因为它们不匹配,因为imageview可能不在屏幕的最顶端。

我想你想要做的是获得实际图像的X和Y. 因此您需要相应地偏移坐标。

有一个很好的例子,已经得到了偏移量,并将其删除:请参阅下面的链接。

https://stackoverflow.com/a/11312423/940834

您能得到您的视图的左上角如下:

int[] viewCoords = new int[2]; 
imageView.getLocationOnScreen(viewCoords); 

从这和触摸 坐标就可以计算出的ImageView内的点:

int touchX = (int) event.getX(); 
int touchY = (int) event.getY(); 

int imageX = touchX - viewCoords[0]; // viewCoords[0] is the X coordinate 
int imageY = touchY - viewCoords[1]; // viewCoords[1] is the y coordinate 
+0

执行完int [] v iewCoords = new int [2]; imageView.getLocationOnScreen(viewCoords); viewCoords中的值是{0,0}。所以,实际上,它什么都不做。 –

+0

@ankitshubham。你有上面答案中偏移的原因。如果这个特定的实现不起作用,我建议现在在互联网上寻找另一个,你有一个地方开始。 – Doomsknight

+0

@ankitshubham。另外我建议把这个代码放在ontouch方法中。不是oncreate方法。这可能有助于通货膨胀应该发生 – Doomsknight