-1

可能重复:
如何通过在android中触摸来拖动图像?

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

插图

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

B = 位图

o1 = 我的目的地点一

o2 = 我的目的地点二

o3 = 我的目的地点三

如果位图向右拖动,则位图在我的目标点一

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

如果我的目标点上的位图向右拖动然后位图更改为我的目标点二

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

如果我的目标点二上的位图向左拖动,则位图回到我的目标点一

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

等等..

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

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

4

2 回答 2

0

你为什么不试试这个教程通过使用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);
}
于 2012-10-15T06:27:20.073 回答
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>

拖动活动:

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

}
于 2012-10-15T05:49:40.310 回答