Android从源中拖动无限图像

时间:2014-05-20 05:39:10

标签: android drag-and-drop

我正在尝试在Android中实现拖放功能。我选择使用运动事件来实现它。因为我觉得它很容易理解。我想让我移动的图像保持在同一位置并移动重复。我真的不知道怎么解释,我想在角落里看到一个图像,当我移动它时,图像仍然保留在那里,但我移动另一个相同的图像,如果我想从同一个移动另一个我再次移动另一个位置。就像我试图从一个篮子里拿出10个球,但在这种情况下篮子和球是相同的形象。

到目前为止,我的代码是:

public class MainActivity extends ActionBarActivity {

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

         ViewGroup vg = (ViewGroup)findViewById(R.id.container);
            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() - 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(
                                            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.newwall);

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

此外,我正在使用ViewGroup并且我附加了touchListener。当我按下Layout我正在按下我按下的图像时,我想要如果我触摸屏幕上的其他位置,我会将图像保留在那里。当我结束拖动时我试图将selected_item设置为null但是我没有做好它我猜是因为我收到错误和应用程序崩溃

请帮我解决这两个问题。

1 个答案:

答案 0 :(得分:0)

这是我用于类似目的的

ImageView snapshot = (ImageView)findViewById(R.id.nonFullScreenSnapshot);
vg.buildDrawingCache();
cache = Bitmap.createBitmap(vg.getDrawingCache());
Drawable drawableShot = new BitmapDrawable(getResources(), cache);
snapshot.setImageDrawable(drawableShot);
snapshot.setVisibility(View.VISIBLE);

在这种情况下,我的xml布局中已经有了一个ImageView,它至少应该与想要复制的图像一样大。

因此,当用户触摸您的ViewGroup时,您应该复制它,然后将其放在新位置。 但要注意重复的数量,因为你可以很容易地耗尽内存,你将获得OutOfMemory异常。