Android multi ImageView перемещается по прикосновению

Ниже представлен мой xml-файл. Это имя main.xml


<?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> 

И мой файл Java ниже


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

Я могу добиться движения на ощупь, но, поскольку есть 2 изображения, добавленные только последние добавленные изображения, можно перемещать.

Я предполагаю, что проблема заключается в layout_width="fill_parent" который вызывает распознавание только фронтального изображения. И если я использую layout_width="wrap_content" чем изображение просматривается только в области размера изображения и невидимо.

Как решить эту проблему?

Благодаря,

Я почти решил вашу проблему. Из-за времени я не двигаюсь вперед, я внес некоторые изменения в ваш файл main.xml.

 <?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> 

Имейте в виду использование собственных изображений и внесение соответствующих изменений. Два изображения, которые я использовал, это

  1. ic_launcher
  2. toyota_altis

Только один процесс просмотра onTouch . Поэтому есть несколько вариантов:

1) вернуть « false » – это может помочь вам

2) используйте « wrap_content » и не используйте ImageMatrix . Переместите левый верхний угол изображения

U также может добавить кнопку переключения, и при нажатии кнопки переключения u вы можете перенести изображение на передний план, используя это

 imageView1.bringToFront()/imageView2.bringToFront() 

Впишите свой код в свой файл активности.

 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 Файл: –

 <?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> 

И см. Ниже ссылку SO answer для получения дополнительной информации.

Перетаскивание двух изображений