2012-08-10 10 views
6

Ich mache ein Modul, in dem ich zwei Bilder habe, wenn ich ein Bild berühre, sollte es dem Finger oder der Maus (im Emulator) beim Ziehen folgen und wenn es über das andere Bild kommt, dann ändern sie ihre Positionen wo erstes Bild war beim ersten Berühren (ACTION_DOWN). Ich habe den folgenden Code geschrieben, in dem sich die Ansichten bewegen, aber wenn ich das erste Bild ziehe, wird auch das zweite Bild gezogen. Außerdem möchte ich eine Idee haben, wie man die Positionen ändert.zwei Bild ziehen

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

Aktivitätsdatei

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

Auf welche Version zielen Sie? android hat eine Drag-API wie von Waben – JRaymond

Antwort

2

Das zweite Bild wird gezogen, weil Sie die beiden in einem LinearLayout haben. Die Layout-Parameter des zweiten Bildes hängen von der ersten ab. Das bedeutet, dass das zweite Bild bei der Einstellung nach rechts an den rechten Rand des ersten Bildes gebunden wird.

Wenn ich näher auf dieses Problem (vorausgesetzt, ich konnte nicht die Drag-API in Honeycomb eingeführt), würde ich zuerst alles in eine RelativeLayout mit 2 ImageView s. Wenn Sie eines der Bilder "aufnehmen", passen Sie seine Layout-Parameter an, wenn Sie es bewegen, und wenn Sie es dann ablegen, passen Sie die LayoutParams von beiden an, um Ihr gewünschtes Layout zu treffen.

1

findViewById(R.drawable.realimage) sollte findViewById(R.id.realimage) sein.

Ich denke, Sie sollten id anstelle von drawable verwenden.

+0

sein Geben Fehler ... dieses Bild ist in/res/Drawable – karan421

+2

dann sollten Sie so etwas verwenden Drawable Drawable = getResources(). getDrawable (R.drawable.id); – Braj

Verwandte Themen