如何在Android的放大/缩小的ImageView的(不是使用Canvas) [英] How to Zoom in/Out an ImageView(not using Canvas) in android

查看:134
本文介绍了如何在Android的放大/缩小的ImageView的(不是使用Canvas)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作的应用程序中,我需要旋转,拖动ñ下降和放大/缩小图像(较小)在另一幅图像(大的)。我做旋转和拖动ñ下降,但不能输入/输出来实现变焦。我知道怎么做,在画布上,但在我的应用程序,我不使用画布。 任何帮助,将不胜感激..........

I am working on app in which i have to rotate,drag n drop and zoom in/out an image(smaller one) over another image(bigger one). I am done with rotation and drag n drop but not able to implement zoom in/out. I know how to do it on canvas But in my app I am not using Canvas. Any Help would be Grateful..........

谢谢 Davender

Thanks Davender

推荐答案

请查看以下code,让我知道,如果它帮助。

check out the following code and let me know if it helps.

public class Touch extends Activity implements OnTouchListener {

private static final String TAG = "Touch" ;
// These matrices will be used to move and zoom image
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
PointF start = new  PointF();
public static PointF mid = new PointF();

// We can be in one of these 3 states
public static final int NONE = 0;
public static final int DRAG = 1;
public static final int ZOOM = 2;
public static int mode = NONE;

float oldDist;

private float[] matrixValues = new float[9];

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ImageView view = (ImageView) findViewById(R.id.imageView);
    view.setOnTouchListener(this);
}

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

    ImageView view = (ImageView) v;

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

    case MotionEvent.ACTION_DOWN:

        savedMatrix.set(matrix);
        start.set(event.getX(), event.getY());
        Log.d(TAG, "mode=DRAG" );
        mode = DRAG;
        break;

    case MotionEvent.ACTION_POINTER_DOWN:

        oldDist = spacing(event);
        Log.d(TAG, "oldDist=" + oldDist);
        if (oldDist > 10f) {

            savedMatrix.set(matrix);
            midPoint(mid, event);
            mode = ZOOM;
            Log.d(TAG, "mode=ZOOM" );
        }
        break;

    case MotionEvent.ACTION_MOVE:

        if (mode == DRAG) {

            matrix.set(savedMatrix);
            matrix.postTranslate(event.getX() - start.x, event.getY() - start.y);
        }
        else if (mode == ZOOM) {

            float newDist = spacing(event);
            Log.d(TAG, "newDist=" + newDist);
            if (newDist > 10f) {

                matrix.set(savedMatrix);
                float scale = newDist / oldDist;
                matrix.postScale(scale, scale, mid.x, mid.y);
            }
        }
        break;

    case MotionEvent.ACTION_UP:
    case MotionEvent.ACTION_POINTER_UP:

        mode = NONE;
        Log.d(TAG, "mode=NONE" );
        break;
    }

    // Perform the transformation
    view.setImageMatrix(matrix);

    return true; // indicate event was handled
}

  private float spacing(MotionEvent event) {
    float x = event.getX(0) - event.getX(1);
    float y = event.getY(0) - event.getY(1);
    return FloatMath.sqrt(x * x + y * y);
}

private void midPoint(PointF point, MotionEvent event) {

    float x = event.getX(0) + event.getX(1);
    float y = event.getY(0) + event.getY(1);
    point.set(x / 2, y / 2);
}

}

以下是main.xml中的文件

Following is the main.xml file

<?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">
    <ImageView 
            android:id="@+id/imageView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:src="@drawable/yourimage"
            android:scaleType="matrix">
    </ImageView>
    </FrameLayout>

替换ImageView的(yourimage)的SRC属性的值,你在你的项目中图像的名称。

replace the value of src property of the imageview (yourimage), to name of the image you have in your project.

这篇关于如何在Android的放大/缩小的ImageView的(不是使用Canvas)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆