2011-10-19 34 views
15

Dưới đây là tệp xml của tôi. Đó là tên là main.xmlAndroid nhiều ImageView di chuyển khi chạm vào


<?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/icon" 
     android:scaleType="matrix"> 
    </ImageView> 
    <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent" 
     android:layout_height="fill_parent" android:src="@drawable/bg_sound" 
     android:scaleType="matrix"></ImageView> 
</FrameLayout> 

Và Java tập tin của tôi là dưới


import android.app.Activity; 
import android.graphics.Matrix; 
import android.graphics.PointF; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.util.FloatMath; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.ImageView; 

public class Test1Activity 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(); 

    // We can be in one of these 3 states 

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

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ImageView view = (ImageView) findViewById(R.id.imageView); 
     view.setOnTouchListener(this); 

     ImageView view1 = (ImageView) findViewById(R.id.imageView1); 
     view1.setOnTouchListener(this); 
    } 

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

     // Handle touch events here... 
     switch (event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 
      savedMatrix.set(matrix); 
      start.set(event.getX(), event.getY()); 
      break; 
     case MotionEvent.ACTION_UP: 
      savedMatrix.set(matrix); 
      //matrix.postRotate(90); 

      break; 
     case MotionEvent.ACTION_MOVE: 
       // ... 
       matrix.set(savedMatrix); 
       matrix.postTranslate(event.getX() - start.x, event.getY() 
         - start.y); 
      break; 
     } 

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

} 

tôi có thể đạt được di chuyển trên cảm ứng nhưng vì có 2 lần xem hình ảnh chỉ thêm số lần xem hình được thêm mới nhất có thể di chuyển được.

Tôi đoán sự cố là layout_width="fill_parent" chỉ khiến cho số lần xem trước phía trước được nhận dạng khi chạm. và nếu tôi đang sử dụng layout_width="wrap_content" thì số lần xem hình ảnh chỉ di chuyển trong khu vực có kích thước hình ảnh đó và bị ẩn.

Cách khắc phục sự cố này?

Xin cảm ơn,

+1

Tốt câu hỏi này .. –

Trả lời

1

Chỉ một quy trình xem onTouch hành động. vì vậy có một vài lựa chọn:

1) trở lại "false" - nó có thể giúp bạn

2) sử dụng "wrap_content" và không sử dụng ImageMatrix. Di chuyển góc trên cùng bên trái của hình ảnh

2

Tôi gần như đã giải quyết được vấn đề của bạn. Bởi vì thời gian tôi không di chuyển về phía trước tôi đã thực hiện một số thay đổi trong file main.xml bạn một sau

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:orientation="vertical"> 

     <ImageView android:id="@+id/imageView" android:layout_width="fill_parent" 
      android:layout_height="100dp" android:src="@drawable/ic_launcher" 
      android:scaleType="matrix" 
      android:layout_alignParentTop="true" 
      > 
     </ImageView> 
     <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent" 
      android:layout_height="fill_parent" android:src="@drawable/toyota_altis" 
      android:scaleType="matrix" 
      android:layout_below="@+id/imageView"></ImageView> 

</RelativeLayout> 

Hãy nhớ sử dụng hình ảnh của riêng bạn và thực hiện thay đổi thích hợp Hai hình ảnh tôi sử dụng là

  1. ic_launcher
  2. toyota_altis
0

Viết Dưới Mã vào Hoạt động tập tin của bạn.

int windowwidth = getWindowManager().getDefaultDisplay().getWidth(); 
int windowheight = getWindowManager().getDefaultDisplay().getHeight(); 


tv1 = (ImageView)findViewById(R.id.image); 
tv1.setOnTouchListener(new View.OnTouchListener() {   

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     layoutParams1 = (RelativeLayout.LayoutParams) tv1.getLayoutParams(); 
     switch(event.getActionMasked()) 
     { 
      case MotionEvent.ACTION_DOWN: 
       break; 
      case MotionEvent.ACTION_MOVE: 
       int x_cord = (int) event.getRawX(); 
       int y_cord = (int) event.getRawY(); 
       if (x_cord > windowwidth) { 
        x_cord = windowwidth; 
       } 
       if (y_cord > windowheight) { 
        y_cord = windowheight; 
       } 
       layoutParams1.leftMargin = x_cord - 25; 
       layoutParams1.topMargin = y_cord - 75; 
       tv1.setLayoutParams(layoutParams1); 
       break; 
      default: 
       break; 
     } 
     return true; 
    } 
}); 

tv2 = (ImageView)findViewById(R.id.image1); 
tv2.setOnTouchListener(new View.OnTouchListener() {   

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     layoutParams2 = (RelativeLayout.LayoutParams) tv2.getLayoutParams(); 
     switch(event.getActionMasked()) 
     { 
      case MotionEvent.ACTION_DOWN: 
       break; 
      case MotionEvent.ACTION_MOVE: 
       int x_cord = (int) event.getRawX(); 
       int y_cord = (int) event.getRawY(); 
       if (x_cord > windowwidth) { 
        x_cord = windowwidth; 
       } 
       if (y_cord > windowheight) { 
        y_cord = windowheight; 
       } 
       layoutParams2.leftMargin = x_cord - 25; 
       layoutParams2.topMargin = y_cord - 75; 
       tv2.setLayoutParams(layoutParams2); 
       break; 
      default: 
       break; 
     } 
     return true; 
    } 
}); 

main.xml File: -

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ImageView android:layout_width="50sp" android:layout_height="50sp" 
     android:id="@+id/image" android:src="@drawable/image"> 
    </ImageView> 
    <ImageView android:layout_y="30dip" android:layout_x="118dip" 
     android:layout_width="50sp" android:layout_height="50sp" android:id="@+id/image1" 
     android:src="@drawable/image1"> 
    </ImageView> 
</RelativeLayout> 

và xem bên dưới SO liên kết câu trả lời để biết thêm thông tin.

Drag & Drop Two Images

1

u cũng có thể thêm một nút bật tắt và trên click vào nút Toggle u có thể mang lại các ImageView để phía trước bằng cách sử dụng

imageView1.bringToFront()/imageView2.bringToFront() 
Các vấn đề liên quan