通过onTouch()移动ImageView

10 浏览
0 Comments

通过onTouch()移动ImageView

我有一个AbsoluteLayout,我想通过我的触摸点在这个布局中移动我的ImageView。看看我的代码,当我触摸任何点时一切都很好,点保存在一个变量中,但是ImageView消失了,有什么想法吗?\n我的XML布局:\n


    

\n我的代码:\n

FstBall = (ImageView) findViewById(R.id.FirstBall);
FstBall.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        float x = event.getX();
        float y = event.getY();
        int action = event.getAction();
        float FnlResX = 0;
        float FnlResY = 0;
        if (action == MotionEvent.ACTION_MOVE) {
            FnlResX = x;
            FnlResY = y;
            int tst1 = (int) FnlResX;
            int tst2 = (int) FnlResY;
            FstBall.scrollBy(tst1, tst2);
        }
        return true;
    }
});

0
0 Comments

问题:Move ImageView through onTouch()的原因和解决方法

在给定的代码中,onTouchEvent()方法用于在触摸事件发生时移动ImageView。但是,在实际使用过程中可能会出现一些问题。

问题的原因:

1. 代码中使用的是AbsoluteLayout.LayoutParams,这是一个已经过时的布局参数类。在较新的Android版本中,已经不推荐使用该类。

2. 使用绝对布局(AbsoluteLayout)来放置视图,这也是一个已经过时的布局。

3. 代码中没有进行边界检查,因此可能导致ImageView移动到屏幕外部。

解决方法:

1. 使用更适合的布局参数类,如RelativeLayout.LayoutParams或LinearLayout.LayoutParams。

2. 使用更合适的布局,如RelativeLayout或LinearLayout。

3. 在代码中添加边界检查,确保ImageView不会移动到屏幕外部。

修复后的代码如下所示:

public boolean onTouchEvent(MotionEvent event) {
    super.onTouchEvent(event);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(FstBall.getLayoutParams());
    params.leftMargin = (int) event.getX();
    params.topMargin = (int) event.getY();
    FstBall.setLayoutParams(params);
    return true;
}

通过上述修改,我们解决了原始代码中存在的问题。现在,ImageView将通过触摸事件在屏幕上移动,并且已经更新了布局参数和布局来适应较新的Android版本和布局标准。

0
0 Comments

问题的原因是,通过滚动窗口而不是实际移动视图,导致图像视图没有移动。解决方法是重写布局的onTouchEvent()方法,并在该方法中实现移动图像视图的逻辑。

首先,我们创建一个继承自AbsoluteLayout的自定义布局类MyAbsoluteLayout。在该类中,重写onTouchEvent()方法。在该方法中,首先获取当前深度的子视图,然后获取子视图的布局参数,并将其左边距和上边距设置为触摸事件的坐标。最后,将更新后的布局参数重新设置给子视图,并返回super.onTouchEvent()。

然后,在MyActivity类的onCreate()方法中,创建MyAbsoluteLayout的实例,并设置布局参数。接下来,创建一个ImageView实例,并设置其布局参数和背景。将ImageView添加到MyAbsoluteLayout中,并通过调用layout的setMovingChildDepth()方法设置当前移动的子视图的深度。最后,通过调用setContentView()方法将布局设置为当前活动的视图。

通过以上的实现,我们可以在触摸屏幕时移动ImageView视图。

注意:以上代码仅为伪代码,仅用于说明问题的原因和解决方法,并未经过实际测试。

0