2012-10-01 5 views
1

나는 내 코드 here.i 제공하고있다 9 부분으로 이미지를 부러 뜨 리고 그리드보기에서 그들을 클릭하여 이미지를 변경하는 방법 즉, (첫 번째 클릭 한 이미지를 두 번째로 클릭해야 교체해야합니다 이미지와 그 반대의 경우) 이미지를 분할하기 위해 비트 맵 배열을 사용하고 격자보기에 배치했습니다. 그래서 어떻게 두 이미지를 클릭하여 그리드보기에서 이미지를 변경하려면 이미지의 교환은 어떻게해야 하나 도와 줄 수 있어야합니다.안드로이드 이미지 교체 gridview에서

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 
+0

onItemClickListener() U 자리스트의 각 요소에 대한 플래그를 설정하고, 플래그를 이용하여 서로를 교환. –

+0

내가 더 자세한 방법을 설명 할 수있다 – user1705339

+0

플래그가있는 케이스 조건을 사용하고 조건을 확인하십시오. 최적화 된 방법을 생각했지만, mathsqrt를 사용했습니다. –

답변

0

우리가 구현할 수있는 또 다른 방법.

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

, 여기

목록에서 스왑이 이미지에 대한 방법의 @Terril 토마스의 스와핑 두 개의 이미지를 선택하려면이

같은에서 onCreate에서

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

변화에 따라 처음

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

어댑터 새로 고침보다

ca.notifyDataSetChanged();