拖动和投掷地图

时间:2018-02-18 12:10:32

标签: java android

你好下, 我正在尝试将动态地图(View)实现到我的应用程序中,我需要让它的运动行为像Google Map一样。所以它必须做两件事,滚动和投掷。 (我有理由不使用实际的Google地图)。

第一次,我通过它Scroll处理地图的拖动和投掷。但它抖动,因为void View.setScrollX(int)不能有float的参数,所以它不够平滑。

在第二次时,我尝试Translation移动地图,但即使单独拖动工作并且单独工作也一起工作,它一起做了一些奇怪的行为。

我的问题是:如何让ScrollFling很好地协同工作?我会很高兴看到每一条建议或剪掉代码:)

这是第二个解决方案:

ImageView img;     String msg =“我的日志”;

float firstPosX = 0;
float firstPosY = 0;

int touchCount;

FlingAnimation flingAnimX;
FlingAnimation flingAnimY;

GestureDetector gestureDetector;

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    img = (ImageView) findViewById(R.id.imageView);
    gestureDetector = new GestureDetector(getApplicationContext(), mGestureListener);

    img.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            touchCount = event.getPointerCount();

            //Stops Fling, so on the new touch it dont continue
            if (flingAnimX != null) {
                flingAnimX.cancel();
            }
            if (flingAnimY != null) {
                flingAnimY.cancel();
            }

            if (touchCount == 1) {
                float deltaPosX = 0;
                float deltaPosY = 0;

                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    firstPosX = event.getX();
                    firstPosY = event.getY();
                } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
                    deltaPosX = -firstPosX + event.getX();
                    deltaPosY = -firstPosY + event.getY();

                    img.setTranslationX(deltaPosX + img.getTranslationX());
                    img.setTranslationY(deltaPosY + img.getTranslationY());
                }
            }
            gestureDetector.onTouchEvent(event);

            return true;
        }
    });
}

GestureDetector.SimpleOnGestureListener mGestureListener = new GestureDetector.SimpleOnGestureListener() {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2,
                           float velocityX, float velocityY) {
        if (touchCount == 1) {
            flingAnimX = new FlingAnimation(img, DynamicAnimation.TRANSLATION_X)
                    .setStartVelocity(velocityX);
            flingAnimX.start();
            flingAnimY = new FlingAnimation(img, DynamicAnimation.TRANSLATION_Y)
                    .setStartVelocity(velocityY);
            flingAnimY.start();
        }
        return true;
    }
};

0 个答案:

没有答案