我正在尝试在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但是我没有做好它我猜是因为我收到错误和应用程序崩溃
请帮我解决这两个问题。
答案 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异常。