2011-07-18 17 views
0

BaseAdapterを使用して自分のアプリケーションのギャラリーを設定しました。ここで私がギャラリーに使用したコードです。ギャラリーのsetSelectionが間違ったアイテムを選択しました

homeGallery = (Gallery) findViewById(R.id.homeimggallery); 
homeGallery.setSpacing(0); 
homeGallery.setSelection(0); 
homeGallery.setAdapter(new AddImgAdp(this)); 

private class AddImgAdp extends BaseAdapter { 
    private int GalItemBg, temp; 
    private Context cont; 
    private View convertView1; 
    private ViewGroup parent1; 
    private Bitmap mask = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.mask); 
    private Bitmap whiteBorder = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.stroke); 
    private Bitmap blueBorder = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.strokeactive); 
    private Bitmap src; 
    private Bitmap dest; 
    private Canvas canvas; 
    private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    private ImageView homeImgView; 
    private ImageView[] homeImgViewArr= new ImageView[arrThumbImage.length]; 


    public AddImgAdp(Context c) { 
     cont = c; 
     TypedArray typArray = obtainStyledAttributes(styleable.GalleryTheme); 
     GalItemBg = typArray.getResourceId(styleable.GalleryTheme_android_galleryItemBackground, 0); 
     typArray.recycle(); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 
    } 
     public int getCount() { 
      return arrThumbImage.length; 
     } 
     public Object getItem(int position) { 
      return position; 
     } 
     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 

      homeImgView = new ImageView(cont); 

      try{  

       src = BitmapFactory.decodeResource(mContext.getResources(), arrThumbImage[position]); 

       dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888); 
       canvas = new Canvas(dest); 
       canvas.drawColor(Color.TRANSPARENT); 
       canvas.save(); 
       canvas.translate((canvas.getWidth() - src.getWidth())>> 1, (canvas.getHeight() - src.getHeight())>> 1); 
       canvas.drawBitmap(src, 0, 0, null); 
       canvas.drawBitmap(mask, 0, 0, paint); 
       canvas.drawBitmap(dest, 0, 0, paint); 

       homeImgView.setBackgroundDrawable(new BitmapDrawable(dest));    
       homeImgView.setImageResource(R.drawable.stroke); 

       homeImgView.setScaleType(ImageView.ScaleType.FIT_XY); 
       homeImgViewArr[position] = homeImgView; 

      } catch(Exception e) {} 


      return homeImgView; 
     } 
    } 

ギャラリーは以下のようになります。指の動きに

enter image description here

は、それが期待通りに右に左または右から左に動いています。アイテムにonClickアクションを追加します。ユーザーが任意の画像をクリックすると、その画像が選択され、中央に揃えられます。このアクションには、次のコードが使用されます。

homeGallery.setOnItemClickListener(new OnItemClickListener() { 
        public void onItemClick(AdapterView parent, View v, int position, long id) { 
homeGallery.setSelection(position); 

        } 
       }); 

しかし、結果は間違っています。項目Noを選択している場合。 2、項目番号。

enter image description here

私のコードに問題は何ですか:3は、setSelectionアクションがアイテムなし2に対して発射されたが、私は、それが下の行を結果される上記PICの一番右の項目をクリックすると、選択してしまいましたか?

+0

便利です、あなたが第二設定されている場合は、インデックスがそう0から始まり、その後ギャラリーで、それは私がそれを知って、選択した – ingsaurabh

+0

雅としてあなたの第三項目が表示されますことを知っていました。すべての位置は0から始まります。 –

答えて

0

私は自分でギャラリーで作業していますが、あなたのコードは私の立場よりも深いので、ここで何が問題なのかよく分かりません。

とにかく、アイテム3をクリックしているので、アイテム4を中心にすると、いくつかのオプションを考えることができます:

- 配列インデックスに何か問題があります。位置のログを取ることもできます。

- 私はIntegerの配列を使用していますが、getView()では自分が思っているよりも簡単な位置を取得します。

public ArrayList mImageIds = new ArrayList();配列... i.setImageResource(mImageIds.get(position)); getView()ではソートされます。

希望これは

+0

私は同じことをしましたが、イメージには何らかの修正が必要なので、修正のためにマスクを使用しました。 –

関連する問題