如何在android中的屏幕边界移动和缩放图像视图

时间:2013-08-29 12:18:58

标签: android android-listview

嗨我需要使用下面的代码缩放和移动我的图像它工作得很好。但在这里我有一些问题。当我给src作为背景图像视图时,它的工作,如果我使用setbackgroundresource()表示背景我的imageview缩放和移动操作不起作用。 2.for imageview如果给了背景fillparent时间只有它的工作正常变焦和move.if给了设置宽度100,高度100这个时间变焦和移动不工作..我需要显示我的imageview与100/100维度我需要在屏幕边界中缩放和移动该图像..我必须做任何一个建议请...请

  public class MainActivity extends Activity implements OnTouchListener{

private static final String TAG = "Touch";

     Matrix matrix = new Matrix();
   Matrix savedMatrix = new Matrix();

   static final int NONE = 0;
   static final int DRAG = 1;
    static final int ZOOM = 2;
       int mode = NONE;

PointF start = new PointF();
PointF mid = new PointF();
     float oldDist = 1f;
     RelativeLayout.LayoutParams rlp3;
    ImageView view;
    RelativeLayout relativemiddlemain;


     @Override
public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

   setContentView(R.layout.activity_main);

 relativemiddlemain=(RelativeLayout)findViewById(R.id.zoomlayout);
    view = new ImageView(MainActivity.this);
                    view.setId(0);
                    view.setScaleType(ScaleType.MATRIX);
                    view.setOnTouchListener(MainActivity.this);
                    rlp3 = new    RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.FILL_PARENT);
      //                     rlp3 = new RelativeLayout.LayoutParams(100,100);
                    rlp3.setMargins(0, 0, 0, 0);
          //                  view.setBackgroundResource(R.drawable.ic_launcher);
                      view.setImageResource(R.drawable.ic_launcher);
             relativemiddlemain.addView(view,rlp3);

    }

 public boolean onTouch(View v, MotionEvent event) {

   ImageView view = (ImageView) v;

   view.setScaleType(ImageView.ScaleType.MATRIX);

   float scale;
    // Dump touch event to log

   dumpEvent(event);

  // Handle touch events here...

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

 case MotionEvent.ACTION_DOWN: //first finger down only

      savedMatrix.set(matrix);

      start.set(event.getX(), event.getY());

      Log.d(TAG, "mode=DRAG" );

      mode = DRAG;

      break;

   case MotionEvent.ACTION_UP: //first finger lifted

   case MotionEvent.ACTION_POINTER_UP: //second finger lifted

      mode = NONE;

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

      break;

   case MotionEvent.ACTION_POINTER_DOWN: //second finger down

      oldDist = spacing(event);

      Log.d(TAG, "oldDist=" + oldDist);

      if (oldDist > 5f) {

         savedMatrix.set(matrix);

         midPoint(mid, event);

         mode = ZOOM;

         Log.d(TAG, "mode=ZOOM" );

      }

      break;



   case MotionEvent.ACTION_MOVE:

      if (mode == DRAG) { //movement of first finger

         matrix.set(savedMatrix);

         if (view.getLeft() >= -392){

            matrix.postTranslate(event.getX() - start.x, event.getY() - start.y);

         }

      }

      else if (mode == ZOOM) { //pinch zooming

         float newDist = spacing(event);

         Log.d(TAG, "newDist=" + newDist);

         if (newDist > 5f) {

            matrix.set(savedMatrix);

            scale = newDist / oldDist; /*thinking i need to play around with this value to limit it*/

            matrix.postScale(scale, scale, mid.x, mid.y);

         }

      }

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

}



/** 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("]" );

   Log.d(TAG, sb.toString());

}

  }

0 个答案:

没有答案