2012-08-10 93 views
6

我正在制作一个模块,其中我有两个图像,每当我触摸一个图像,它应该按照手指或鼠标(在模拟器)上拖动,如果它来到另一个图像,然后他们改变他们的位置,第一个图像是第一次触摸(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; 
        } 
      }); 

} 
    } 
+0

你的目标是什么版本? android有一个拖动API的蜂窝 – JRaymond 2012-08-29 17:26:26

回答

2

由于LinearLayout中有两个图像,第二个图像正在被拖动。第二个图像的布局参数依赖于第一个图像,这意味着当您将它们调整到右侧时,第二个图像将绑定到第一个图像的右侧边缘。

如果我处理这个问题(假设我不能用在蜂窝推出的拖拽API),我将首先把一切都放在一个秒。当您“拾取”其中一个图像时,可以在移动它时调整其布局参数,然后在放下它时调整两个图像的LayoutParams以满足所需的布局。

1

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

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

+0

其错误提示...这个图像是/ res/drawable – karan421 2012-08-10 06:43:17

+2

然后,你应该使用这样的东西 Drawable drawable = getResources()。getDrawable(R.drawable.id); – Braj 2012-08-10 06:46:24