2012-10-19 5 views
0

내 응용 프로그램에서 두 이미지를 동시에 드래그 및 확대/축소하고 싶지만 screen.If에서 하나의 이미지 만 이동할 수 있습니다. 두 번째 이미지를 선택하거나 터치하려고하면 ... 첫 번째 이미지 선택 및 이동, 드래그 및 zoom.Below는 내 코드입니다 zooming을 수행합니다.두 이미지에 ontouch 이벤트

import android.app.Activity; 
import android.graphics.Matrix; 
import android.graphics.PointF; 
import android.os.Bundle; 
import android.util.FloatMath; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.View.OnTouchListener; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.Toast; 

import com.example.multotouch.R.id; 

public class MainActivity extends Activity implements OnTouchListener, OnClickListener{ 
    private static final String TAG = "Touch" ; 
    Matrix matrix = new Matrix(); 
     Matrix savedMatrix = new Matrix(); 
     ImageView view1,view2; 
     Button b1; 

     // We can be in one of these 3 states 
     static final int NONE = 0; 
     static final int DRAG = 1; 
     static final int ZOOM = 2; 
     PointF start = new PointF(); 
     PointF mid = new PointF(); 
     float oldDist = 1f; 
     int mode = NONE; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     view2 = (ImageView) findViewById(R.id.imageView); 
     view2.setOnTouchListener(this); 
     b1=(Button)findViewById(id.button1); 
     b1.setOnClickListener(this); 

     view1 = (ImageView) findViewById(R.id.imageView2); 
     view1.setOnTouchListener(this); 
    } 
    public boolean onTouch(View v, MotionEvent event) { 

     switch(v.getId()) 
     { 
     case R.id.imageView : 
       view2.bringToFront(); 

       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_UP: 
       case MotionEvent.ACTION_POINTER_UP: 
          mode = NONE; 
          Log.d(TAG, "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); 
           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_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; 
       } 
       view2.setImageMatrix(matrix); 
       dumpEvent(event); 
       return true; // indicate event was handled 

     case R.id.imageView2 : 
       view2.bringToFront(); 
       Toast.makeText(getApplicationContext()," Hii image22",Toast.LENGTH_LONG).show(); 
       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_UP: 
       case MotionEvent.ACTION_POINTER_UP: 
        mode = NONE; 
        Log.d(TAG, "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); 
         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_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; 

      } 


      view2.setImageMatrix(matrix); 
      dumpEvent(event); 
      return true; // indicate event was handled 



     } 
     return true; 



    } 


    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()); 
      } 
    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); 
     } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
    public void onClick(View v) { 
     if (v == b1){ 
      Toast.makeText(getApplicationContext(), "haii",Toast.LENGTH_SHORT).show(); 
      view1.setEnabled(false); 
      view1.setEnabled(true); 
      view1.setEnabled(false); 
      view1.setEnabled(true); 

     } 

    } 



} 
main.xml 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
<RelativeLayout 
    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/ic_launcher" 
     android:scaleType="matrix" > 
    </ImageView> 
    <ImageView android:id="@+id/imageView2" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:src="@drawable/ic_launcher" 

     android:scaleType="matrix" > 
    </ImageView> 
</RelativeLayout> 
<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="36dp" 
     android:text="Button" 
     /> 
</RelativeLayout> 
</RelativeLayout> 

답변

0

드래그 두 이미지에 대한 내 대답은 아래 링크를 사용하여 문제를 해결할 수 있습니다.

Drag Two Images

+0

예, ... 그것은 노력하고 있습니다 ... 내 기쁨, Dipak – satish

+0

에 오신 것을 환영합니다 사티 U 감사합니다. –

+0

한 번 더 질문 ...이 화면을 비트 맵 이미지로 저장할 수있는 방법은 무엇입니까? 이미지보기를 이동 한 후 .... 전체 화면 (보기는 비트 맵 이미지로 저장해야 함) .... 제발 신경 쓰지 마세요 ... 저는 Android에 익숙하지 않습니다. 이렇게 많은 문제가 발생합니다 .. – satish