onTouchListener在ImageView中无法正常工作

时间:2017-02-23 07:11:47

标签: android android-layout scaling

我正在开发一个Android应用程序,在我的应用程序中,我动态创建一些ImageView并将ImageViews设置为RelativeLayout。所以我想独立地拖动布局中的每个图像。现在它的工作但不正确,当我拖动图像然后图像开始振动并缓慢移动。我想在此图片中实现缩放。这可能吗?以及如何在移动图像时消除振动?如果有人知道,请帮帮我..

由于

这是我的 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;
            }

        });

这是我用于将图像设置为RelativeLayout的 setCanvasImage()方法

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 文件

<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>

2 个答案:

答案 0 :(得分:1)

我认为这会奏效。

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;
}

答案 1 :(得分:0)

您需要使用scalx和imagey的imagey因子来实现缩放缩放

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

Android你可以调整左边距和边距顶部来拖动图像视图

您可以在Move zoom and rotate imageview in android

看到此功能的完整实现