【问题标题】:Imageview not following finger touchImageview 不跟随手指触摸
【发布时间】:2017-06-06 14:35:15
【问题描述】:

我想构建一个具有图像视图的应用程序,它只是跟随手指触摸。换句话说,图像视图跟随手指的触摸。我已经部分实现了这一点,因为图像视图跟随手指的触摸,但问题是它有一些偏移。 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 的指导。

【问题讨论】:

    标签: android touch-event motionevent


    【解决方案1】:

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

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

    这将导致您看到的偏移,因为它们不匹配,因为图像视图可能不在屏幕的最顶部。

    我认为您正在尝试做的是获取实际图像的 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
    

    【讨论】:

    • 执行完 int[] viewCoords = new int[2]; imageView.getLocationOnScreen(viewCoords); viewCoords 中的值为 {0,0}。所以,实际上,它什么都不做。
    • @ankitshubham。您在上面的答案中有偏移的原因。如果该特定实现不起作用,我建议您在互联网上寻找另一个,因为您已经有了一个开始的地方。
    • @ankitshubham。我还建议将此代码放在 ontouch 方法中。不是 oncreate 方法。这可能会有所帮助,因为通货膨胀应该已经发生了
    • 看来我确实解决了我的问题。以下逻辑成功了: img.setX(event.getX()-(viewCoords[0]-img.getX())); img.setY(event.getY()-(viewCoords[1]-img.getY()));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2019-04-14
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多