缩放和平移的ImageView的Andr​​oid电话的OnCreate [英] Zoom and Panning ImageView Android oncreate call

查看:187
本文介绍了缩放和平移的ImageView的Andr​​oid电话的OnCreate的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道它有点老的文章,但任何帮助将是非常美联社preciated。我试图调用这个类MyImageView这里的布局:

I know its a bit old post but any help would be very appreciated. I tried to call this class"MyImageView" here is the layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   tools:context=".MainScreen" >
   <ImageView android:id="@+id/imageView1"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:contentDescription="@string/map"
       android:scaleType="matrix"
       android:src="@drawable/map" />
</RelativeLayout>

这里是的onCreate:

here is the onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mainscreen);

    final ImageView imageView  = (ImageView) findViewById(R.id.imageView1);

    Resources resource = this.getResources();
    XmlPullParser parser = resource.getXml(R.layout.activity_mainscreen);
    AttributeSet attributes = Xml.asAttributeSet(parser);

    final MyImageView miv = new MyImageView(this, attributes);

    imageView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(final View view, final MotionEvent event) {
           return miv.onTouchEvent(event);
        }
    });

}

这里是链接的ORIGINALE后:

here is the link the originale post:

<一个href=\"http://stackoverflow.com/questions/12169905/zoom-and-panning-imageview-android/21725090#21725090\">Zoom和平移的ImageView的Andr​​oid

和没有缩放或平移,请我还是新来这这么原谅我无知。

and there is no zoom or pan, please I'm still new to this so pardon my ignorant.

推荐答案

如果你想要一个平移和缩放的听众。

If you want an pan and zoom listener.

按照此code。

从code删除imageView.setOnTouchListener。

remove the imageView.setOnTouchListener from your code.

和添加我的code

final ImageView imageView  = (ImageView) findViewById(R.id.imageView1);

imageView.setOnTouchListener(new Touch()); 

Bitmap map=BitmapFactory.decodeResource(getResources(), R.drawable.map);

imageView.setImageBitmap(map);

现在在你的项目中创建一个新的类并将其命名为触摸

Now create a new class in your project and name it "Touch"

写在触摸类以下

package com.forlo.photo;

import android.graphics.Matrix;  
import android.graphics.PointF;  
import android.util.FloatMath;  
import android.view.MotionEvent;  
import android.view.View;  
import android.view.View.OnTouchListener;  
import android.widget.ImageView; 

public class Touch implements OnTouchListener {  

 // These matrices will be used to move and zoom image  
public static Matrix matrix = new Matrix();  
public static Matrix savedMatrix = new Matrix();  

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

 // Remember some things for zooming  
 PointF start = new PointF();  
 PointF mid = new PointF();  
 float oldDist = 1f;  


 @Override  
 public boolean onTouch(View v, MotionEvent event) {  
  ImageView view = (ImageView) v;  
  // Dump touch event to log  
  dumpEvent(event);  

  // Handle touch events here...  
  switch (event.getAction() & MotionEvent.ACTION_MASK) {  
  case MotionEvent.ACTION_DOWN:  
   savedMatrix.set(matrix);  
   start.set(event.getX(), event.getY());  
   mode = DRAG;  
   break;  
  case MotionEvent.ACTION_POINTER_DOWN:  
   oldDist = spacing(event);  
   if (oldDist > 10f) {  
    savedMatrix.set(matrix);  
    midPoint(mid, event);  
    mode = ZOOM;  
   }  
   break;  
  case MotionEvent.ACTION_UP:  
  case MotionEvent.ACTION_POINTER_UP:  
   mode = NONE;  
   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);  
    if (newDist > 10f) {  
     matrix.set(savedMatrix);  
     float scale = newDist / oldDist;  
     matrix.postScale(scale, scale, mid.x, mid.y);  
    }  
   }  
   break;  
  }  

  view.setImageMatrix(matrix);  
  return true; // indicate event was handled  
 }  

 /** Show an event in the LogCat view, for debugging */  
 private void dumpEvent(MotionEvent event) {  
  String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE",  
    "POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" };  
  StringBuilder sb = new StringBuilder();  
  int action = event.getAction();  
  int actionCode = action & MotionEvent.ACTION_MASK;  
  sb.append("event ACTION_").append(names[actionCode]);  
  if (actionCode == MotionEvent.ACTION_POINTER_DOWN  
    || actionCode == MotionEvent.ACTION_POINTER_UP) {  
   sb.append("(pid ").append(  
     action >> MotionEvent.ACTION_POINTER_ID_SHIFT);  
   sb.append(")");  
  }  
  sb.append("[");  
  for (int i = 0; i < event.getPointerCount(); i++) {  
   sb.append("#").append(i);  
   sb.append("(pid ").append(event.getPointerId(i));  
   sb.append(")=").append((int) event.getX(i));  
   sb.append(",").append((int) event.getY(i));  
   if (i + 1 < event.getPointerCount())  
    sb.append(";");  
  }  
  sb.append("]");  
 }  

 /** Determine the space between the first two fingers */  
 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);  
 }  

 /** Calculate the mid point of the first two fingers */  
 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);  
 }  
}

和改变你的布局,这种

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context=".MainScreen" >
<ImageView android:id="@+id/imageView1"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:contentDescription="@string/map"
   android:scaleType="matrix"/>
</RelativeLayout>

现在告诉我,如果平移和缩放工作。

Now tell me if pan and zoom worked..

这篇关于缩放和平移的ImageView的Andr​​oid电话的OnCreate的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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