开发者

setSelection on Gallery is resulting wrong item selected

开发者 https://www.devze.com 2023-03-20 19:35 出处:网络
I have set up a gallery for my app using BaseAdapter. Here is the code I used for the gallery. homeGallery = (Gallery) findViewById(R.id.homeimggallery);

I have set up a gallery for my app using BaseAdapter. Here is the code I used for the gallery.

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

The gallery looks like below:

setSelection on Gallery is resulting wrong item selected

On finger movement, it is moving right to left or left to right as expected. Now I want to add some onClick action to items. If user click on any image, it will be selected and align in the middle. The following code is used for this action.

homeGallery.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView parent, View v, int position, long id) {
hom开发者_如何转开发eGallery.setSelection(position);

                    }
                });

But it results wrongly. If I am selecting item no. 2, the item no. 3 got selected, although setSelection action is firing against item no 2. If I click on the right most item of the above pic, it is resulting line below:

setSelection on Gallery is resulting wrong item selected

What is the problem in my code?


I'm working with a Gallery myself, but I'm not quite sure what the problem is here, since your code is further than where I stand.

Anyways, since you click item 3?? and you get item 4 centered I can think of a few options:

-Something is wrong with the array indexes, might wanna take a log of the positions.

-Personally, I work with an array of Integer and on the getView() I just get the position which is easier than what you're doing I believe.

public ArrayList mImageIds = new ArrayList(); the array... i.setImageResource(mImageIds.get(position)); and in getView() it's sorted.

Hope this is helpful

0

精彩评论

暂无评论...
验证码 换一张
取 消