Astro
Astro

Reputation: 201

onTouchListener is not working properly in ImageView

I am developing an android application, in my application I dynamically create some ImageViews and set that ImageViews in to a RelativeLayout. So I want to drag each image in the layout independently.Now its working but not properly, when I drag image then the image start vibrating and moving slowly. And I wanted to implement Pinch Zoom in this image.Is it possible? And how how can I remove the vibration on moving the image ? If any one know it please help me..

Thanks

This is my onTouchListener()

    canvasImage[i].setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {


                x1 = motionEvent.getX();
                y1 = motionEvent.getY();

                //Log.v("vvvvvv", "" + x1 + " " + y1);
                final int action = motionEvent.getAction();

                switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {

                    case MotionEvent.ACTION_DOWN:

                        String w = imglayout.getTop() + " " + imglayout.getHeight();
                        Log.v("wwww", "" + w);

                        x2 = motionEvent.getX();
                        y2 = motionEvent.getY();

                        dx = x2 - canvasImage[finalI].getX();
                        dy = y2 - canvasImage[finalI].getY();

                        //Log.v("cccccc", "" + x2 + " " + y2);
                        moving = true;
                        break;
                    case MotionEvent.ACTION_UP:
                        moving = false;
                        break;
                    case MotionEvent.ACTION_MOVE:


                        if (moving) {

                            canvasImage[finalI].setX(motionEvent.getX() - dx);
                            canvasImage[finalI].setY(motionEvent.getY() - dy);

                            //Log.v("qqqqqq", "" + canvasImage[finalI].getX());
                        }
                        break;
                }
                //mainLayout.invalidate();
                return true;
            }

        });

This is my setCanvasImage() method used to set images into RelativeLayout

public void setCanvasImage() {


    int screenSize = getResources().getConfiguration().screenLayout &
            Configuration.SCREENLAYOUT_SIZE_MASK;


    final int imgCount = dbobj.getFromTemp();
    canvasImage = new ImageView[imgCount];
    imglayout = (RelativeLayout) findViewById(R.id.canvas);

    final String[] strImage = dbobj.getdImage();

    imglayout.removeAllViews();


    for (int i = 0; i < imgCount; i++) {

        canvasImage[i] = new ImageView(this);
        canvasImage[i].setTag("img_" + i);
        boolean tabletSize = getResources().getBoolean(R.bool.isTablet);

        if (tabletSize) {

            int imgWidth = 130;
            int imgHeight = 130;

            RelativeLayout.LayoutParams paramss = new RelativeLayout.LayoutParams(imgWidth, imgHeight);
            paramss.setMargins(posLeft, posTop, 0, 0);
            canvasImage[i].setLayoutParams(paramss);

            canvasImage[i].setScaleType(ScaleType.FIT_XY);
            canvasImage[i].setTag(strImage[i]);
            setImage(strImage[i], canvasImage[i]);
            imglayout.addView(canvasImage[i]);


        }
        if( screenSize == Configuration.SCREENLAYOUT_SIZE_NORMAL){


            int imgWidth = 100;
            int imgHeight = 100;
            RelativeLayout.LayoutParams paramss = new RelativeLayout.LayoutParams(imgWidth, imgHeight);
            paramss.setMargins(posLeft, posTop, 0, 0);
            canvasImage[i].setLayoutParams(paramss);
            canvasImage[i].setTag(strImage[i]);
            setImage(strImage[i], canvasImage[i]);
            imglayout.addView(canvasImage[i]);
        }

        posLeft = posLeft + 15;
    }
}

RelativeLayout xml file

<RelativeLayout
    android:layout_below="@+id/btnhorscrolvw"
    android:layout_width="match_parent"
    android:layout_height="500dp"
    android:id="@+id/canvas"
    android:background="#ffff"
    android:orientation="horizontal"
  >
</RelativeLayout>

Upvotes: 1

Views: 424

Answers (2)

Ramees
Ramees

Reputation: 76

You need to use scalx and scaley factor of imageview for implementing pinch zooming

imageview.setScaleX(scalefactor);
imageview.setScaleY(scalefacto);

Android you can adjust the margin left and margin top to for draging the imageview

Upvotes: 0

Akhil
Akhil

Reputation: 329

I think this will work.

float dX, dY;

@Override
public boolean onTouch(View view, MotionEvent event) {

switch (event.getAction()) {

    case MotionEvent.ACTION_DOWN:

        dX = view.getX() - event.getRawX();
        dY = view.getY() - event.getRawY();
        break;

    case MotionEvent.ACTION_MOVE:

        view.animate()
                .x(event.getRawX() + dX)
                .y(event.getRawY() + dY)
                .setDuration(0)
                .start();
        break;
    default:
        return false;
}
return true;
}

Upvotes: 1

Related Questions