我正在制作一个模块,其中每当我触摸一个图像时我都有两个图像,它应该在拖动时跟随手指或鼠标(在模拟器中),如果它越过另一个图像,那么它们会改变第一次触摸时第一个图像的位置(ACTION_DOWN) 。我编写了以下代码,其中视图正在移动,但是当我拖动第一个图像时,第二个图像也被拖动。进一步想知道如何改变职位。
.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/vg"
>
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/img1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
活动文件
public class MainActivity extends Activity {
private View selected_item = null;
private int offset_x = 0;
private int offset_y = 0;
Canvas can;
Paint paint;
ImageView img;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewGroup vg = (ViewGroup)findViewById(R.id.vg);
vg.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getActionMasked())
{
case MotionEvent.ACTION_MOVE:
if(selected_item == img) {
int x = (int)event.getX() - offset_x;
int y = (int)event.getY() - offset_y;
int w = getWindowManager().getDefaultDisplay().getWidth() - 100;
int h = getWindowManager().getDefaultDisplay().getHeight() - 100;
if(x > w)
x = w;
if(y > h)
y = h;
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
new ViewGroup.MarginLayoutParams(
100,
100));
lp.setMargins(x, y, 0, 0);
selected_item.setLayoutParams(lp);
}
break;
default:
break;
}
return true;
}
});
img = (ImageView)findViewById(R.id.img);
//timerDelayRemoveView(500, img);
BitmapDrawable drawable = (BitmapDrawable)getResources().getDrawable(R.drawable.imagesl_02);
Bitmap bitmap = drawable.getBitmap();
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
img.setImageBitmap(scaledBitmap);
LinearLayout.LayoutParams lp0 = new LinearLayout.LayoutParams(100, 100);
lp0.leftMargin = 0;
lp0.topMargin = 0;
img.setLayoutParams(lp0);
//vg.addView(img, lp1);
// vg.addView(img, 1);
img.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getActionMasked())
{
case MotionEvent.ACTION_DOWN:
offset_x = (int)event.getX();
offset_y = (int)event.getY();
selected_item = v;
Toast.makeText(MainActivity.this, "down",Toast.LENGTH_SHORT).show();
break;
default: break;
}
return false;
}
});
ImageView img1 = (ImageView)findViewById(R.id.img1);
BitmapDrawable drawable1 = (BitmapDrawable)getResources().getDrawable(R.drawable.realimage);
Bitmap bitmap1 = drawable1.getBitmap();
Bitmap scaledBitmap1 = Bitmap.createScaledBitmap(bitmap1, 100, 100, true);
img1.setImageBitmap(scaledBitmap1);
LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(100, 100);
lp1.leftMargin = 100;
lp1.topMargin = 100;
img1.setLayoutParams(lp1);
//img.setImageBitmap(scaledBitmap1);
img1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getActionMasked())
{
case MotionEvent.ACTION_DOWN:
// offset_x = (int)event.getX();
// offset_y = (int)event.getY();
selected_item = v;
break;
default:
break;
}
return false;
}
});
}
}