Android 双图像拖动

Android 双图像拖动,android,Android,我正在制作一个模块,当我触摸一个图像时,它应该跟随手指或鼠标(在emulator中)拖动,如果它越过另一个图像,那么它们会改变第一次触摸时第一个图像的位置(操作向下)。我已经编写了以下代码,其中视图正在移动,但当我拖动第一个图像时,第二个图像也会被拖动。我想进一步了解如何改变立场 .xml findViewById(R.drawable.realimage)应该是findViewById(R.id.realimage) 我认为您应该使用id而不是drawable第二个图像正在被拖动,因为这两个图

我正在制作一个模块,当我触摸一个图像时,它应该跟随手指或鼠标(在emulator中)拖动,如果它越过另一个图像,那么它们会改变第一次触摸时第一个图像的位置(操作向下)。我已经编写了以下代码,其中视图正在移动,但当我拖动第一个图像时,第二个图像也会被拖动。我想进一步了解如何改变立场

.xml

findViewById(R.drawable.realimage)
应该是
findViewById(R.id.realimage)


我认为您应该使用
id
而不是
drawable

第二个图像正在被拖动,因为这两个图像在线性布局中。第二个图像的布局参数取决于第一个图像,这意味着当您向右调整它们时,第二个图像将绑定到第一个图像的右边缘


如果我要解决这个问题(假设我不能使用蜂巢中引入的拖动API),我会首先将所有内容放在带有2
ImageView
s的
RelativeLayout
中。当您“拾取”其中一幅图像时,您可以在移动图像的同时调整其布局参数,然后在放下图像时调整这两幅图像的
LayoutParams
,以满足您所需的布局要求。

然后,您应该使用类似以下内容:Drawable Drawable=getResources().getDrawable(R.Drawable.id);你的目标是什么版本?android在honeycomb上有一个拖动API
 <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;
                    }
            }); 

}
  }