安卓可拖动ImageVIew

标签 android drag-and-drop imageview ontouchlistener

我有一个 ImageView,我想在用户触摸和移动时在 Y 轴上重新定位它。我可以重新定位它,但是当我移动它时它会闪烁并且不平滑。它也不能完美地跟随我的手指。有没有办法消除闪烁并改善定位?我使用的是标准 ImageView。

这是我在 OnTouch 方法中的内容:

imageView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()){
                case MotionEvent.ACTION_DOWN: {
                    final float y = event.getY();

                    // Remember where we started
                    mLastTouchY = y;
                }
                    break;

                case MotionEvent.ACTION_MOVE:
                    final float y = event.getY();

                    // Calculate the distance moved
                    final float dy = y - mLastTouchY;

                    // Move the object
                    mPosY += dy;

                    // Remember this touch position for the next move event
                    mLastTouchY = y;

                    imageView.setTranslationY(mPosY);
                    return true;
            }
            return false;
        }
    });

最佳答案

你的图像只想沿着 Y 轴移动,而不是任何地方..如果这是你的问题,这就是答案

1.从这里下载项目(https://android-drag-and-drop-basic.googlecode.com/archive/942b651010cc6cad4376df1651123982c1a7474f.zip)

2.在DragAndDropBasicActivity类注释这行,我是怎么做到的

public boolean onTouch(View v, MotionEvent event) {
    boolean eventConsumed = true;
    int x = (int)event.getX();
    int y = (int)event.getY();

    int action = event.getAction();
    if (action == MotionEvent.ACTION_DOWN) {
        if (v == letterView) {
            dragging = true;
            eventConsumed = false;
        }
    } else if (action == MotionEvent.ACTION_UP) {

//          if (dragging) {
//              emptyLetterView.getHitRect(hitRect);
//              if (hitRect.contains(x, y))
//                  setSameAbsoluteLocation(letterView, emptyLetterView);
//          }
        dragging = false;
        eventConsumed = false;

    } else if (action == MotionEvent.ACTION_MOVE) {
        if (v != letterView) {
            if (dragging) {
                setAbsoluteLocationCentered(letterView, x, y);
            }
        }
    }

    return eventConsumed;

}


private void setSameAbsoluteLocation(View v1, View v2) {
    AbsoluteLayout.LayoutParams alp2 = (AbsoluteLayout.LayoutParams) v2.getLayoutParams();
    setAbsoluteLocation(v1, alp2.x, alp2.y);
}

//This method helps the image to keep center of your touch point
private void setAbsoluteLocationCentered(View v, int x, int y) {
    setAbsoluteLocation(v, x - v.getWidth() / 2, y - v.getHeight() / 2);
}

// this method help to place the image in exact position when your finger moved up (that is Action UP)
private void setAbsoluteLocation(View v, int x, int y) {
    AbsoluteLayout.LayoutParams alp = (AbsoluteLayout.LayoutParams) v.getLayoutParams();

// don't forget to comment this line

    //alp.x = x;
    alp.y = y;
    v.setLayoutParams(alp);
}

关于安卓可拖动ImageVIew,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25266065/

相关文章:

Android 添加自定义属性到 View.animate().*

android - 在应用内评分和评论

javascript - 如何在 Python 中实现 Selenium HTML5 拖放解决方法

java - 垃圾收集和 Picasso 的问题

java - 有没有办法在 libGDX(Android 和 iOS 项目)中推送通知?

Android NDK ALooper_pollOnce() 与 ALooper_pollAll()

java - 如何在 Swing 中使用拖放来获取文件路径?

c# - 什么是避免使用大量参数的方法的好设计?

Android 将 ION 与 PhotoView 库结合使用

java - 如何通过在android中的.java文件中提供imgsrc来加载imageview