安卓 ViewPager加载大图 左右滑动

本文介绍了如何在Android中使用ViewPager实现图片左右滑动的效果,同时结合指示点切换功能。代码示例展示了从XML布局到自定义适配器的全过程,包括图片加载、滑动监听以及选中状态的更新。此外,还提到了一个待解决的问题:无法指定默认显示的图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ViewPager图片左右滑动

直接上代码吧:
1,

  private LinearLayout mLinearLayout;
    private ViewPager viewPager;
    private ImageView imageView;//显示数组图片的View
    private List<ImageView> imgsArray;//图片数组
    private List<ImageView> diandianArray;//点数组

    private List<String> imageList;
```,


  

2,

 rl_one=(RelativeLayout)findViewById(R.id.rl_one);
        rl_two_pic=(RelativeLayout)findViewById(R.id.rl_two_pic);
        imageList=new ArrayList<>();
        //xml中的LinearLayout布局
        mLinearLayout = (LinearLayout)findViewById(R.id.layout);
        viewPager = (ViewPager)findViewById(R.id.viewPager);
        viewPager.setOnPageChangeListener(this);

        diandianArray=new ArrayList<>();
        imgsArray=new ArrayList<>();

3,

   //    +++++++++++++++++++++++++++++++++++++++++++++ViewPager+++++++++++++++++++++++++++++++++++++++++++++++++++++++
            private void initBigPic(String imageUrl) {

                mLinearLayout.removeAllViews();
                viewPager.removeAllViews();
                imgsArray.clear();
                diandianArray.clear();

                //设置图片resource的view


                int index=0;
                for(int i = 0; i < imageList.size(); i++){
                    imageView = new ImageView(this);
                    imgsArray.add(imageView);

                    Log.d("info","加载的图片是=="+imageList.get(i));

                    Glide.with(mContext)                             //配置上下文
                            .load(imageList.get(i))      //设置图片路径(fix #8,文件名包含%符号 无法识别和显示)
                            .error(R.mipmap.ic_launcher)           //设置错误图片
                            .placeholder(R.mipmap.ic_launcher)     //设置占位图片
                            .diskCacheStrategy(DiskCacheStrategy.ALL)//缓存全尺寸
                            .into((ImageView) imageView);

                            if(imageList.get(i).equals(imageUrl)){
                                index=i;
                            }

                            imageView.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    rl_one.setVisibility(View.VISIBLE);
                                    rl_two_pic.setVisibility(View.GONE);
                                    setShowBigPic(false);

                                    mLinearLayout.removeAllViews();
                                    viewPager.removeAllViews();
                                    imgsArray.clear();
                                    diandianArray.clear();

                                }
                            });
                        }

        //    viewPager.setCurrentItem(index);

            //设置点点的view++++++++++++++++++++++++++++++++++++
            diandianArray.clear();
            mLinearLayout.removeAllViews();
            for(int i = 0 ; i < imageList.size(); i++){
                imageView = new ImageView(this);
        //        diandianArray[i] = imageView;
                diandianArray.add(imageView);
                if(i == 0){
                    diandianArray.get(i).setBackgroundResource(R.mipmap.issel_ok);
                }else{
                    diandianArray.get(i).setBackgroundResource(R.mipmap.issel_nosel);
                }

                Log.e("info", "diandianArray:" + diandianArray);
                //此处通过方法来设置点点的布局属性,并将点点的布局属性放入到xml中的mLinearLayout,显示出来
                LinearLayout.LayoutParams linearLayout = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                linearLayout.width = 20;
                linearLayout.height = 20;
                linearLayout.leftMargin = 5;
                linearLayout.rightMargin = 5;
                linearLayout.bottomMargin = 10;
                linearLayout.topMargin = 10;
                mLinearLayout.addView(imageView,linearLayout);

            }
            Log.d("info","数量是=="+imageList.size()+"  "+imgsArray.size());
            viewPager.setAdapter(new ContentAdapter());


    }

    @Override
        public void onPageScrollStateChanged(int arg0) {
            Log.e("info", "onPageScrollStateChanged()方法有没有响应啊,吱一声啊!1");
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            Log.e("info", "onPageScrolled()方法有没有响应啊,吱一声啊!2");
        }

        @Override
        public void onPageSelected(int position) {
            Log.e("info", "onPageSelected()方法有没有响应啊,吱一声啊!3");
            for(int i = 0; i < diandianArray.size(); i++){
                diandianArray.get(position).setBackgroundResource(R.mipmap.issel_ok);
                if(i != position){
                    diandianArray.get(i).setBackgroundResource(R.mipmap.issel_nosel);
                }
            }
        }

        //更新数量
    public void UpdateNumber() {
        imageList.clear();

        for (int i=0;i<images.size();i++){

            if(images.get(i).equals("foot")){

            }else {
                imageList.add(images.get(i));
            }
        }
    }


    public class ContentAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            Log.d("info","ContentAdapter  getCount");
            return imageList.size();
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            Log.d("info","ContentAdapter  isViewFromObject");
            return arg0 == arg1;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            Log.d("info","ContentAdapter  移除了 控件==="+position+"  数量是=="+imgsArray.size());
            container.removeView(imgsArray.get(position));

//            ContentAdapter  移除了 控件===0  数量是==1
//            ContentAdapter  移除了 控件===1  数量是==1
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Log.d("info","ContentAdapter 添加了控件 instantiateItem");
            container.addView(imgsArray.get(position),0);
            return imgsArray.get(position);
        }

    }

4,布局:

 <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rl_two_pic"
        android:layout_gravity="center" >

        <android.support.v4.view.ViewPager
            android:id="@+id/viewPager"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"  />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_alignParentBottom="true"
            android:gravity="center_horizontal|center_vertical"
            android:id="@+id/layout" >

        </LinearLayout>

    </RelativeLayout>

OK 以上就是简单的代码了, 这个滑动吧, 左右滑动到最大就会停止,不过 有个缺陷,当我在 RecycleView列表控件点击某个图片 显示 这个 时候,不能指定默认先显示哪个图,大家可以看看 价格方法,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值