Как заставить изображения в GalleryView прийти в исходное положение после завершения прокрутки? - PullRequest
2 голосов
/ 16 ноября 2011

Я рассмотрю простой GalleryView, который состоит из нескольких изображений. Я буду прокручивать слева направо или наоборот, а затем уйти. На данный момент (как показано на 2 изображениях ниже) gallery останавливается в середине изображения, оставляя некоторые пробелы (отмеченные красным цветом на изображении) из начальной позиции или из конечной позиции, когда прокрутка завершена. Меня беспокоит то, что я хочу, чтобы мой gallery получил начальную или конечную позицию (в зависимости от прокрутки) после прокрутки. Как бы я это сделал?

Изображения:

Когда прокрутка слева направо завершена:

Когда прокрутка справа налево завершена:

Мой GalleryView:

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mAudio =(Button)findViewById(R.id.button1);
    mVideo =(Button)findViewById(R.id.button2);
    mImages=(Button)findViewById(R.id.button3);

    mAudio.setOnClickListener(this);
    mVideo.setOnClickListener(this);
    mImages.setOnClickListener(this);

    Gallery ga = (Gallery) findViewById(R.id.Gallery01);
    galleryAdapter = new ImageAdapter(this); 
    galleryAdapter.setResourseArray(image_pics);
    ga.setAdapter(galleryAdapter);

    imageView = (ImageView) findViewById(R.id.ImageView01);
    ga.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
            Toast.makeText(getBaseContext(), "You have selected picture " + (pos + 1) + " of Gallery", Toast.LENGTH_SHORT)
            .show();
            if(activeGallery==AUDIO){
                imageView.setImageResource(audio_pics[pos]);
            }else if(activeGallery==VIDEO){
                imageView.setImageResource(video_pics[pos]);
            }else if(activeGallery==IMAGE){
                imageView.setImageResource(image_pics[pos]);
            }
        }
    });
}

@Override
public void onClick(View view) {
    if (view == mAudio) {
        if (galleryAdapter != null) {
            galleryAdapter.setResourseArray(audio_pics);
            galleryAdapter.notifyDataSetChanged();
            activeGallery=AUDIO;
        }
    } else if (view == mVideo) {
        if (galleryAdapter != null) {
            activeGallery=VIDEO;
            galleryAdapter.setResourseArray(video_pics);
            galleryAdapter.notifyDataSetChanged();
        }
    } else if (view == mImages) {
        if (galleryAdapter != null) {
            activeGallery=IMAGE;
            galleryAdapter.setResourseArray(image_pics);
            galleryAdapter.notifyDataSetChanged();
        }
    }
}

public class ImageAdapter extends BaseAdapter {

    private Context ctx;
    int imageBackground;
    private int[] resourseArray = null;

    public ImageAdapter(Context c) {
        ctx = c;
        TypedArray ta = obtainStyledAttributes(R.styleable.Gallery1);
        imageBackground = ta.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 1);
        ta.recycle();
    }

    @Override
    public int getCount() {
        return resourseArray.length;
    }

    public int[] getResourseArray() {
        return resourseArray;
    }

    public void setResourseArray(int[] resourseArray) {
        this.resourseArray = resourseArray;
    }

    @Override
    public Object getItem(int arg0) {

        return arg0;
    }

    @Override
    public long getItemId(int arg0) {

        return arg0;
    }

    @Override
    public View getView(int position, View arg1, ViewGroup arg2) {
        ImageView iv = new ImageView(ctx);
        iv.setImageResource(resourseArray[position]);
        iv.setScaleType(ImageView.ScaleType.FIT_XY);
        iv.setLayoutParams(new Gallery.LayoutParams(150, 120));
        iv.setBackgroundResource(imageBackground);
        return iv;
    }

}

Проще говоря, я хочу, чтобы эффект упругости для этих видов галереи.

1 Ответ

2 голосов
/ 16 апреля 2014

Я знаю только, как убрать пробел с левой стороны, и изображение начнется слева.Структура, описывающая общую информацию об отображении, такую ​​как его размер, плотность и масштабирование шрифта. Чтобы получить доступ к элементам DisplayMetrics, инициализируйте объект, подобный этому

    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    Gallery g = (Gallery) findViewById(R.id.gallery);

    // set gallery to left side
    MarginLayoutParams mlp = (MarginLayoutParams) g.getLayoutParams();
    mlp.setMargins(-(metrics.widthPixels / 2 + (imageWidth/2)), mlp.topMargin,
                mlp.rightMargin, mlp.bottomMargin);
...