setSelection on Gallery приводит к тому, что выбран неправильный элемент - PullRequest
0 голосов
/ 18 июля 2011

Я установил галерею для своего приложения, используя BaseAdapter. Вот код, который я использовал для галереи.

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

                    }
                });

Но это неверно. Если я выбираю пункт №. 2, пункт № 3 выбрано, хотя действие setSelection срабатывает против элемента № 2. Если я щелкну по самому правому элементу вышеупомянутой картинки, получится следующая строка:

enter image description here

В чем проблема в моем коде?

1 Ответ

0 голосов
/ 18 июля 2011

Я сам работаю с Галереей, но я не совсем уверен, в чем здесь проблема, поскольку ваш код дальше, чем там, где я стою.

В любом случае, поскольку вы нажимаете пункт 3 ??и вы получаете пункт 4 по центру, я могу придумать несколько вариантов:

-Что-то не так с индексами массива, возможно, захочу взять журнал позиций.

-Личномассив Integer и в getView () я просто получаю позицию, которая проще, чем я полагаю.

public ArrayList mImageIds = new ArrayList ();массив ... i.setImageResource (mImageIds.get (position));и в getView () он отсортирован.

Надеюсь, это полезно

...