2012-08-10 20 views
6

Tworzę moduł, w którym mam dwa obrazy, ilekroć dotknę jednego obrazu, który powinien podążać za palcem lub myszą (w emulatorze) po przeciągnięciu, a jeśli pojawi się inny obraz, to zmieniają one swoje pozycje, w których pierwsze zdjęcie było na pierwszym dotknięciu (ACTION_DOWN). Napisałem następujący kod, w którym widoki się poruszają, ale kiedy przeciągam pierwszy obraz, drugi jest również przeciągany. Dalej chciałbym mieć pomysł na zmianę pozycji.dwa obrazy przeciągając

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

plik aktywność

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

Jakie wydanie kierujesz na cel? Android ma interfejs API przeciągania, jak z plastra miodu – JRaymond

Odpowiedz

2

Drugi obraz jest przeciągany, ponieważ masz dwa w LinearLayout. Parametry układu drugiego obrazu są zależne od pierwszego, co oznacza, że ​​po dopasowaniu ich w prawo drugi obraz jest przywiązany do prawej krawędzi pierwszego.

Gdybym zbliżał się do tego problemu (zakładając, że nie mogłem użyć interfejsu API do przeciągania wprowadzonego w strukturze plastra miodu), najpierw wstawiłbym wszystko w postaci RelativeLayout z 2 ImageView s. Gdy "podnosisz" jeden z obrazów, dostosowujesz parametry układu podczas jego przesuwania, a po jego upuszczeniu dostosowujesz LayoutParams obydwu w celu uzyskania pożądanego układu.

1

findViewById(R.drawable.realimage) powinny być findViewById(R.id.realimage).

Myślę, że powinieneś użyć id zamiast drawable.

+0

jego błąd podania ... ten obraz jest w/res/drawable – karan421

+2

, powinieneś użyć czegoś takiego: Drawable drawable = getResources(). getDrawable (R.drawable.id); – Braj

Powiązane problemy