如何让GalleryView中的图片滚动完成后回到初始位置?

发布于 2024-12-16 15:59:40 字数 3659 浏览 1 评论 0原文

我将考虑一个简单的 GalleryView,它由几个图像组成。我将从左向右滚动,反之亦然,然后离开。截至目前(如下面的 2 个图像所示),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;
    }

}

简单来说,我希望这些图库视图具有弹性效果。

I will consider a simple GalleryView which consists of few images.I will scroll from left to right or vice versa and then leave. As of now (as shown in the 2 images below) the gallery stops in the middle of the view, leaving some spaces (marked red colour in the image) from the initial position or from the final position whenever the scrolling is complete. My concern is, I want my gallery to acquire the initial position or final position (scroll dependent) after scrolling. How would I do that?

Images:

When left to right scrolling is completed:

When right to left scrolling is completed:

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

}

To be simple, I want the elastic effect to these gallery views.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

三五鸿雁 2024-12-23 15:59:41

我只知道如何删除左侧的空间,并且图像将从左侧开始。
描述有关显示器的一般信息的结构,例如其大小、密度和字体缩放。要访问 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);

I know only how to remove space from left side and image will start from left.
A structure describing general information about a display, such as its size, density, and font scaling.To access the DisplayMetrics members, initialize an object like this

    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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文