我正在创建一个应用程序,我需要在网格视图中交换图像。这是代码...... 我怎么能实现交换:
活性
public class GameActivity extends Activity
implements OnTouchListener
{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Intent intent = getIntent();
setContentView(R.layout.layout_game);
//create grid view
splitImage();
GridView gridView = new GridView(this);
gridView = (GridView)findViewById(R.id.grid_view);
final ImageAdapter images = new ImageAdapter(this,chunkedImages);
final GridView gV = gridView;
gridView.setAdapter(images);
gridView.setOnTouchListener(this);
}
public boolean onTouch(View v, MotionEvent me) {
switch(me.getAction())
{
case MotionEvent.ACTION_DOWN :
Toast.makeText(GameActivity.this, "down ", Toast.LENGTH_SHORT).show();
break;
case MotionEvent.ACTION_UP :
Toast.makeText(GameActivity.this, "up " , Toast.LENGTH_SHORT).show();
break;
case MotionEvent.ACTION_MOVE :
//Toast.makeText(GameActivity.this, "move", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
}
在触摸图像时,它会向下方提供烤面包,并在取出时放弃。但如何交换图像我无法理解。
答案 0 :(得分:1)
我建议使用OnItemClicklistener触摸两个不同的图像来交换它们。像这样:
private int firstPosition = -1;
...
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(firstPosition < 0)
firstPosition = position;
else {
Bitmap swapImage = chunkedImages.get(position);
chunkedImages.set(position, chunkedImages.get(firstPosition));
chunkedImages.set(firstPosition, swapImage);
firstPosition = -1;
}
}
});
您应该添加一些功能,例如在选择第一张图片时突出显示第一张图片,但这是基本方法。
如果你想要拖放,你需要做更多的工作......
答案 1 :(得分:1)
可以在适配器中完成正确的交换方式。创建自己的基本适配器或从任何其他适配器继承,并包括将从活动中调用的任何刷新方法。 在此方法中,您可以执行必要的更改以成功交换。最终,您将能够使用Collections.swap
交换数组中的项目希望它有所帮助 *如果有必要(notifyDatasetChanged)
,请不要忘记在源准备就绪时更新组件答案 2 :(得分:0)
https://github.com/thquinn/DraggableGridView
这是一个解决方案。可能符合您的要求。看看