Home > database >  How to make draggable and zoomable image in android?
How to make draggable and zoomable image in android?

Time:10-12

I'm currently creating my own game and I'm finding a way to recreate some sort of Clash of Clans kind of functionality where you can zoom in and out and drag the view of the screen these is what so far, I've done and it's kind of close to it I guess any other recommendations.

Functionality for it to zoom

image = (ImageView) findViewById(R.id.imageView);

sgd = new ScaleGestureDetector(this, new ScaleListener());
 @Override
public boolean onTouchEvent(MotionEvent event) {
    sgd.onTouchEvent(event);
    return super.onTouchEvent(event);
}

class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener{
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        FACTOR *= detector.getScaleFactor();
        FACTOR = Math.max(.01f,Math.min(FACTOR, 10.f));
        image.setScaleX(FACTOR);
        image.setScaleY(FACTOR);
        return true;
    }
}

For it to drag

image.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {

            switch (motionEvent.getActionMasked()) {
                //checks if the user place finger in the screen
                case MotionEvent.ACTION_DOWN:
                    xDown = motionEvent.getX();
                    yDown = motionEvent.getY();
                    break;
                //checks if the user moves thier finger
                case MotionEvent.ACTION_MOVE:
                    float movedX, movedY;
                    movedX = motionEvent.getX();
                    movedY = motionEvent.getY();

                    //calculate how much the user move their fingers
                    float distanceX = movedX - xDown;
                    float distanceY = movedY - yDown;

                    //will move the view to that position
                    image.setX(image.getX()   distanceX);
                    image.setY(image.getY()   distanceY);

                    break;
            }
            return true;
        }
    });
}

CodePudding user response:

You can help from PhotoView library

PhotoView aims to help produce an easily usable implementation of a zooming Android ImageView.

https://github.com/Baseflow/PhotoView

  • Related