在Android中为Api调整大小和移动图像<11 [英] Resize and Move Image in Android for Api &lt; 11

查看:89
本文介绍了在Android中为Api调整大小和移动图像<11的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在努力实现

  1. 拖放(移动)Api< 11

  1. drag and drop (Move) Api < 11

调整大小(大于原始图像)

Resize (Larger than original Image)

是否有任何外部库可供我们在View中调整大小和移动图像?

Is there any external library from which we can resize and move the image in View?

欢迎使用外部材料,Api,库和链接.

External Materials, Api, Library and Links would be welcome.

推荐答案

Matrix()onTouchListener()上玩耍是通过工作完成的.

Playing around with Matrix() and onTouchListener() had done by work.

public class CustomizeActivity extends Activity {
private static final String TAG = "Touch" ;
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
PointF start = new  PointF();
public static PointF mid = new PointF();

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


public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
iv=new ImageView(this);
iv.setOnTouchListener(t);
}
 OnTouchListener t=new View.OnTouchListener() {

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

这篇关于在Android中为Api调整大小和移动图像<11的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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