如何用手指在我的目标点上拖动图像

时间:2012-10-15 05:34:26

标签: android

  

可能重复:
  how to drag an image by touching in android?

如何使用带有可能目标点边界的拖动手指左移和右移位图

ilustration

B--------o1-----------o2-----------o3

B =位图

o1 =我的目标点一

o2 =我的目标点二

o3 =我的目的地点三

如果位图拖动到目标点上的位图,那么

---------B---------o2-----------o3

如果我的目的地上的位图指向一个向右拖动然后位图改为我的目标点二

----------o1--------B-------------o3

如果我的目的地上的位图指向两个向左拖动然后位图返回到我的目标点一

----------B--------o2-------------o3

依旧......

如何将我的想法实现到android代码?

请给我示例代码,因为我是android上的新手。

2 个答案:

答案 0 :(得分:0)

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"
        android:layout_marginLeft="10px"
        android:src="@drawable/image" />

</LinearLayout>

DragActivity:

public class DragActivity extends Activity {

    private View selected_item = null;
    private int offset_x = 0;
    private int offset_y = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_drag);
    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:
                                            int x = (int)event.getX() - offset_x;
                                            int y = (int)event.getY() - offset_y;
                    int w = getWindowManager().getDefaultDisplay().getWidth()- 70;
                    int h = getWindowManager().getDefaultDisplay().getHeight()- 70;
                    if(x > w)
                        x = w;
                    if(y > h)
                        y = h;
                                     LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                                    new ViewGroup.MarginLayoutParams(
                                                    LinearLayout.LayoutParams.WRAP_CONTENT,
                                                    LinearLayout.LayoutParams.WRAP_CONTENT));
                                     lp.setMargins(x, y, 0, 0);
                                            selected_item.setLayoutParams(lp);
                                            break;
                                    default:
                                            break;
                            }
                            return true;
                    }
});
   ImageView img = (ImageView)findViewById(R.id.img);
    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;
                                            break;
                                    default:
                                            break;
                            }

                            return false;
                    }
            });
}

}

答案 1 :(得分:0)

为什么不尝试this tutorial使用onTouchEvent将根据示例教程链接为您提供所需的任何内容。示例代码 -

@Override
public boolean onTouchEvent(MotionEvent event) {
    mX = (int) event.getX() - mBitmap.getWidth() / 2;
    mY = (int) event.getY() - mBitmap.getHeight() / 2;
    return super.onTouchEvent(event);
}