2012-08-10 6 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

어떤 버전을 타겟팅하고 있습니까? 안드로이드는 벌집 모양으로 드래그 API를 가지고 있습니다 – JRaymond

답변

2

2 개의 이미지가 LinearLayout에 있기 때문에 두 번째 이미지가 드래그되고 있습니다. 두 번째 이미지의 레이아웃 매개 변수는 첫 번째 이미지에 따라 달라 지므로 두 번째 이미지는 첫 번째 이미지의 오른쪽 가장자리에 바인딩됩니다.

(내가 Honeycomb에서 소개 한 드래그 API를 사용할 수 없다고 가정 할 때) 나는 RelativeLayout에 2 ImageView과 함께 모든 것을 넣을 것입니다. 이미지 중 하나를 "선택"하면 레이아웃 매개 변수를 이동할 때 레이아웃 매개 변수를 조정 한 다음 놓으면 드롭 다운 할 때 두 레이아웃 모두를 원하는 레이아웃으로 맞 춥니 다.

1

findViewById(R.drawable.realimage)findViewById(R.id.realimage)해야한다.

나는 drawable 대신 id을 사용해야한다고 생각합니다.

+0

그것의 오류를주는 ...이 이미지는/res/drawable에 있습니다 – karan421

+2

다음과 같은 것을 사용해야합니다 Drawable drawable = getResources(). getDrawable (R.drawable.id); – Braj