6

私は、一方の画像に触れるたびに2つの画像があり、ドラッグ時に指またはマウス(エミュレーター内)をたどる必要があり、もう一方の画像に重なると、最初の画像が最初に触れた位置を変更するモジュールを作成しています(ACTION_DOWN)。ビューが移動する次のコードを記述しましたが、最初の画像をドラッグすると、2番目の画像もドラッグされます。さらに、位置を変更する方法についてのアイデアが欲しいです。

.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;
                    }
            }); 

}
  }
4

2 に答える 2

2

LinearLayoutに2つあるため、2番目の画像がドラッグされています。2番目の画像のレイアウトパラメータは最初の画像に依存しています。つまり、画像を右に調整すると、2番目の画像は最初の画像の右端にバインドされます。

この問題に取り組んでいる場合(Honeycombで導入されたドラッグAPIを使用できなかったと仮定して)、最初にすべてRelativeLayoutを2ImageView秒で入力します。画像の1つを「ピックアップ」するときは、画像を移動しながらレイアウトパラメータを調整し、ドロップするときはLayoutParams、両方の画像を調整して目的のレイアウトに合わせます。

于 2012-08-29T17:35:26.563 に答える
1

findViewById(R.drawable.realimage)である必要がありますfindViewById(R.id.realimage)

idの代わりに使うべきだと思いますdrawable

于 2012-08-10T06:38:26.147 に答える