使用OnTouchListener在网格视图中交换图像

时间:2012-08-12 18:51:15

标签: java android

我正在创建一个应用程序,我需要在网格视图中交换图像。这是代码...... 我怎么能实现交换:

活性

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

 }

在触摸图像时,它会向下方提供烤面包,并在取出时放弃。但如何交换图像我无法理解。

3 个答案:

答案 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

这是一个解决方案。可能符合您的要求。看看