【问题标题】:swap images in grid view using OnTouchListener使用 OnTouchListener 在网格视图中交换图像
【发布时间】:2012-08-12 18:51:14
【问题描述】:

我正在制作一个需要在网格视图中交换图像的应用程序。这是代码... 我怎样才能实现交换:

活动

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

 }

在触摸图像时,它会吐司掉下来,并且在移除手指时会放弃。但是如何交换图像我不明白。

【问题讨论】:

标签: java android


【解决方案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;
        }
    }
});

您应该添加功能,例如在选择第一张图像时突出显示它,但这是基本方法。

如果你想要拖放,你需要做更多的工作......

【讨论】:

【解决方案2】:

正确的交换方式可能在适配器中完成。创建您自己的基本适配器或从任何其他适配器继承,并包括将从活动中调用的任何用于刷卡的方法。 在此方法中,您可以执行必要的更改以成功交换。最终,您将能够使用 Collections.swap 交换数组中的项目

希望对你有帮助 *如果需要,不要忘记在源准备好时更新您的组件 (notifyDatasetChanged)

【讨论】:

    【解决方案3】:

    https://github.com/thquinn/DraggableGridView

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 2015-09-27
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      相关资源
      最近更新 更多