在android中,gridview中的图像替换问题

在android中,gridview中的图像替换问题,android,Android,我在这里提供我的代码。我已经将一个图像分成9个部分,并在网格视图中演示了如何通过单击图像来更改图像,即,(第一次单击的图像应替换为第二次单击的图像,反之亦然)我使用位图数组来分割图像,并将其放置在网格视图中。那么,如何通过单击两个图像来更改网格视图中的图像应该如何进行图像交换任何一个都可以帮助我 public class Imagepieces extends Activity { ArrayList<Bitmap> breakedimages,dup

我在这里提供我的代码。我已经将一个图像分成9个部分,并在网格视图中演示了如何通过单击图像来更改图像,即,(第一次单击的图像应替换为第二次单击的图像,反之亦然)我使用位图数组来分割图像,并将其放置在网格视图中。那么,如何通过单击两个图像来更改网格视图中的图像应该如何进行图像交换任何一个都可以帮助我

public class Imagepieces extends Activity {
                ArrayList<Bitmap> breakedimages,duplicate;
                GridView g;
                int i=0,temp,temp2,rpos;

                @Override

                protected void onCreate(Bundle savedInstanceState) {
                    // TODO Auto-generated method stub
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_image);
                    breakedimages = getIntent().getParcelableArrayListExtra("breaked image");
                    duplicate = new ArrayList<Bitmap>(breakedimages);
                    Collections.shuffle(duplicate);
                    g = (GridView) findViewById(R.id.gridView1);
                    g.setAdapter(new CutAdapter(this, breakedimages));
                    g.setNumColumns((int) Math.sqrt(breakedimages.size()));
                    g.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                                long arg3) {                
                            // TODO Auto-generated method stub
                            //=================================================
                            {






                        }
                    });
                }

                class CutAdapter extends BaseAdapter {
                    int iwidth, iheight; 
                    Context context;

                    public CutAdapter(Imagepieces ipieces, ArrayList<Bitmap> breakedimages) {
                        // TODO Auto-generated constructor stub
                        iwidth = breakedimages.get(0).getWidth();
                        iheight = breakedimages.get(0).getHeight();
                        context = ipieces;
                    }

                    @Override
                    public int getCount() {
                        // TODO Auto-generated method stub
                        return duplicate.size();
                    }

                    @Override
                    public Object getItem(int arg0) {
                        // TODO Auto-generated method stub
                        return duplicate.get(arg0);
                    }

                    @Override
                    public long getItemId(int arg0) {
                        // TODO Auto-generated method stub
                        return arg0;
                    }

                    @Override
                    public View getView(int arg0, View arg1, ViewGroup arg2) {
                        // TODO Auto-generated method stub
                        ImageView i=new ImageView(context);

                        i.setLayoutParams(new GridView.LayoutParams(iwidth +5,iheight +5));
                        i.setPadding(0, 0, 0, 0);
                        i.setImageBitmap(duplicate.get(arg0));

                        return i;
                    }

                }
            }



can any one do the need for me as i have stuck here how to move the images among themselves 
公共类Imagepieces扩展活动{
ArrayList BreakeImage,重复;
网格视图g;
int i=0,临时,临时2,RPO;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u图像);
BreakeImage=getIntent().getParcelableArrayListExtra(“断开的图像”);
复制=新阵列列表(断开图像);
收藏。洗牌(重复);
g=(GridView)findViewById(R.id.gridView1);
g、 setAdapter(新的CutAdapter(此为BreakeImage));
g、 setNumColumns((int)Math.sqrt(breakedimages.size());
g、 setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3{
//TODO自动生成的方法存根
//=================================================
{
}
});
}
类CutAdapter扩展了BaseAdapter{
国际宽度,国际宽度;
语境;
公共剪切适配器(Imagepieces、ArrayList BreakeImage){
//TODO自动生成的构造函数存根
iwidth=breakeImage.get(0.getWidth();
iheight=breakedimages.get(0.getHeight();
上下文=ipieces;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回replicate.size();
}
@凌驾
公共对象getItem(int arg0){
//TODO自动生成的方法存根
返回副本。获取(arg0);
}
@凌驾
公共长getItemId(int arg0){
//TODO自动生成的方法存根
返回arg0;
}
@凌驾
公共视图getView(int arg0、视图arg1、视图组arg2){
//TODO自动生成的方法存根
ImageView i=新的ImageView(上下文);
i、 setLayoutParams(新的GridView.LayoutParams(iwidth+5,iheight+5));
i、 设置填充(0,0,0,0);
i、 setImageBitmap(复制.get(arg0));
返回i;
}
}
}
有谁能满足我的需要,因为我一直停留在这里,如何在它们之间移动图像

首先按照@Terril Thomas的方法选择两张图像进行交换

下面是交换列表中两个图像的方法

  public void swapImage(Bitmap i1,Bitmap i2){

    int position1,position2;
    position1 = duplicate.indexOf(i1);
    duplicate.remove(position1);
    position2 = duplicate.indexOf(i1);
    duplicate.remove(position2);

    if(position2>position1){
        duplicate.add(position2, i1);
        duplicate.add(position1, i2);
    }
    if(position2<position1){
        duplicate.add(position1, i2);
        duplicate.add(position2, i1);
    }
}
然后刷新适配器

    ca.notifyDataSetChanged();

首先按照@Terril Thomas的方法选择两张图像进行交换

下面是交换列表中两个图像的方法

  public void swapImage(Bitmap i1,Bitmap i2){

    int position1,position2;
    position1 = duplicate.indexOf(i1);
    duplicate.remove(position1);
    position2 = duplicate.indexOf(i1);
    duplicate.remove(position2);

    if(position2>position1){
        duplicate.add(position2, i1);
        duplicate.add(position1, i2);
    }
    if(position2<position1){
        duplicate.add(position1, i2);
        duplicate.add(position2, i1);
    }
}
然后刷新适配器

    ca.notifyDataSetChanged();

我们可以实施的另一种方法

onItemClickListener()中


我们可以实施的另一种方法

onItemClickListener()中


你可以为列表中的每个元素设置标志,并使用标志将其与其他元素交换。你可以向我解释更详细的方式吗使用带有标志的案例条件并检查条件。我正在考虑优化方法,但你使用了mathsqrt。你可以为列表中的每个元素设置标志,并使用标志将其与其他元素交换。你可以你向我解释更详细的方式使用带有标志的案例条件并检查条件。我在考虑优化方法,但你使用了mathsqrt。