1

ここでコードを提供しています。画像を9つの部分に分割し、それらをクリックして画像を変更する方法をグリッドビューで示しました(最初にクリックした画像を2番目にクリックした画像に置き換える必要があり、その逆も同様です)ビットマップ配列を使用しました画像を分割し、グリッド ビューに配置します。2つの画像をクリックしてグリッドビューで画像を変更する方法は、画像の交換を行う必要があります。

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 
4

2 に答える 2

1

最初に @Teril Thomas に従って、交換する 2 つの画像を選択します。

リスト内の2つの画像を交換する方法は次のとおりです。

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

このようにonCreateで変更します

CutAdapter ca = new CutAdapter(this, breakedimages);
g.setAdapter(ca);

アダプターを更新するよりも

    ca.notifyDataSetChanged();
于 2012-10-01T06:56:57.270 に答える
0

実装できる別の方法。

onItemClickListener()

     i++;
     Bitmap b = null;
     if (i % 2 != 0) {
       temp = arg2;
       b = duplicate.get(temp);
     }
     if (i % 2 == 0) {
        temp2 = arg2;
        duplicate.set(temp, duplicate.get(arg2));
        duplicate.set(temp2, b);
     }
于 2012-10-01T08:01:15.443 に答える