Java魔匣 2023-04-10 08:19 采纳率: 100%
浏览 15
已结题

Android网络获取多张图片使用Bitmap,viewpager,imageview进行引导页的实现

Bitmap只能存一个,不知道怎么使用集合存储每一个图片,对多长图片怎么进行一个翻页的效果

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2023-04-10 09:43
    关注

    以下内容部分参考ChatGPT模型:


    首先,我们可以使用ArrayList来存储多个Bitmap图片,然后使用ViewPager来展示这些图片并实现翻页效果。具体实现过程如下:

    1.在布局文件中添加ViewPager和指示器(可以使用第三方库如IndicatorSeekBar等):

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
    <com.warkiz.widget.IndicatorSeekBar
        android:id="@+id/indicator"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:isb_indicator_type="circle"
        app:isb_indicator_color="@android:color/white"
        app:isb_indicator_text_color="@android:color/white"
        app:isb_max="3"/>
    

    2.在Java代码中获取Bitmap图片,并添加到ArrayList中:

    ArrayList<Bitmap> bitmapList = new ArrayList<>();
    bitmapList.add(BitmapFactory.decodeResource(getResources(), R.drawable.image1));
    bitmapList.add(BitmapFactory.decodeResource(getResources(), R.drawable.image2));
    bitmapList.add(BitmapFactory.decodeResource(getResources(), R.drawable.image3));
    

    3.创建自定义PagerAdapter,并在其中实现展示每个页面的方法:

    private class MyPagerAdapter extends PagerAdapter {
        private ArrayList<Bitmap> bitmapList;
    
        public MyPagerAdapter(ArrayList<Bitmap> bitmapList) {
            this.bitmapList = bitmapList;
        }
    
        @Override
        public int getCount() {
            return bitmapList.size();
        }
    
        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
            return view == object;
        }
    
        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            ImageView imageView = new ImageView(MainActivity.this);
            imageView.setImageBitmap(bitmapList.get(position));
            container.addView(imageView);
            return imageView;
        }
    
        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
            container.removeView((ImageView) object);
        }
    }
    

    4.将自定义PagerAdapter设置为ViewPager的适配器,并设置指示器的最大值:

    MyPagerAdapter adapter = new MyPagerAdapter(bitmapList);
    viewPager.setAdapter(adapter);
    indicator.setMax(bitmapList.size() - 1);
    

    5.监听ViewPager的滑动事件,更新指示器的进度:

    viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            indicator.setProgress(position);
        }
    });
    

    现在,我们就可以展示多张图片并实现翻页效果了。完整代码如下:

    public class MainActivity extends AppCompatActivity {
        private ViewPager viewPager;
        private IndicatorSeekBar indicator;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            viewPager = findViewById(R.id.viewPager);
            indicator = findViewById(R.id.indicator);
    
            ArrayList<Bitmap> bitmapList = new ArrayList<>();
            bitmapList.add(BitmapFactory.decodeResource(getResources(), R.drawable.image1));
            bitmapList.add(BitmapFactory.decodeResource(getResources(), R.drawable.image2));
            bitmapList.add(BitmapFactory.decodeResource(getResources(), R.drawable.image3));
    
            MyPagerAdapter adapter = new MyPagerAdapter(bitmapList);
            viewPager.setAdapter(adapter);
            indicator.setMax(bitmapList.size() - 1);
    
            viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    indicator.setProgress(position);
                }
            });
        }
    
        private class MyPagerAdapter extends PagerAdapter {
            private ArrayList<Bitmap> bitmapList;
    
            public MyPagerAdapter(ArrayList<Bitmap> bitmapList) {
                this.bitmapList = bitmapList;
            }
    
            @Override
            public int getCount() {
                return bitmapList.size();
            }
    
            @Override
            public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
                return view == object;
            }
    
            @NonNull
            @Override
            public Object instantiateItem(@NonNull ViewGroup container, int position) {
                ImageView imageView = new ImageView(MainActivity.this);
                imageView.setImageBitmap(bitmapList.get(position));
                container.addView(imageView);
                return imageView;
            }
    
            @Override
            public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
                container.removeView((ImageView) object);
            }
        }
    }
    

    如果我的建议对您有帮助、请点击采纳、祝您生活愉快

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 创建了问题 4月10日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境