Android动态批量加载Drawable中的图片

点击蓝字关注我们

前阵子因为项目原因,也一直在更新C#相关的东西,现在项目先告一段落,我们再回到Andriod这块,先说一下,最近的几篇更新最终都会围绕一个小程序来进行的知识点分解 。

目标

动态加载Drawable图片进行查看

还是按照惯例,我们先上实现效果

动态获取Drawable核心代码

public static List<Drawable> getImageResourable(Context context, String imgName) {
    List<Drawable> imgList = new ArrayList<>();
    Resources resources = context.getResources();
    String packagename= context.getPackageName();
    Field[] fields = R.drawable.class.getDeclaredFields();
    for (int i = 0; i < fields.length; i++) {
        fields[i].setAccessible(true);
        String name = fields[i].getName();
        if (name.contains(imgName)) {
            int resId = resources.getIdentifier(name, "drawable", packagename);
            Drawable drawable = resources.getDrawable(resId);
            imgList.add(drawable);
        }
    }
    return imgList;
}

代码实现

01

创建项目

我们新建一个项目RecyclerViewImage的项目,然后布局在activity_main.xml布局文件中加入一个ImageView和4个Button

02

创建imgdeal的类

创建一个imgdeal的类,把我们的核心代码加进去,getImageResourable方法第二个参数名称这块要注意,这里就是检查含有我们输入名称的文件进行加载

03

在Drawable中添加图片

将我们准备好的图片一张张的复制进Drawable中,重命名为img开头的,如下图

04

MainActivity的实现

定义参数

把布局文件中的imageview和4个按钮定义好,然后添加一个List<Drawable>的集合,和一个int类型的设置当前集合中的序号。

onCreate事件

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //加载drawable中的img开头的图片资源
    mImageables=imgdeal.getImageResourable(this, "img");
    currentimgid=0;


    //在imageview中显示第一张资源图片
    imgv=findViewById(R.id.imgsrc);
    ShowImg(currentimgid);


    //第一张图片
    btnfirst=findViewById(R.id.btnfirst);
    btnfirst.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            currentimgid=0;
            ShowImg(currentimgid);
        }
    });


    //上一张按钮
    btnprev=findViewById(R.id.btnprev);
    btnprev.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (currentimgid > 0) {
                currentimgid--;
            }
            ShowImg(currentimgid);
        }
    });


    //下一张按钮
    btnnext=findViewById(R.id.btnnext);
    btnnext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (currentimgid < mImageables.size() - 1) {
                currentimgid++;
            }
            ShowImg(currentimgid);
        }
    });




    //最后一张
    btnend=findViewById(R.id.btnend);
    btnend.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            currentimgid=mImageables.size() - 1;
            ShowImg(currentimgid);
        }
    });


}

这样我们的动态加载Drawable图片就已经完成了。

-END-

Vaccae的往期经典

OpenCV

《C++ OpenCV案例实战---卡号获取

《C++ OpenCV案例实战---卡片截取(附代码)

《C++ OpenCV透视变换---切换手机正面图片》

《C++ OpenCV实战---获取数量

《C++ OpenCV实战---利用颜色分割获取数量》

《OpenCV4Android NDK方式进行Canny边缘检测》

《OpenCV4Android NDK方式TesserartOCR实时进行识别》

《OpenCV4Android NDK级联方式实时进行人脸检测》

OpenCV4Android NDK稠密光流调用

OpenCV4Android NDK背景消除建模(新Demo附源码)

Android

《Android利用SurfaceView结合科大讯飞修改语音实别UI

《Android关于语音识别的功能实现分析(一)---结构化思维》

《Android关于语音识别的功能实现分析(二)---语义解析》

《Android根据类生成签名字符串

《Android碎片化布局fragment的实战应用

《Android中RecyclerView嵌套RecyclerView

《Android里用AsyncTask后的接口回调

.Net C#

《C#自定义特性(Attribute)讲解与实际应用

《C#根据类生成签名字符串(附DEMO下载地址)

《C++创建动态库C#调用》

《C#与三菱PLC(型号FX2N)串口通讯类

C#开源跨平台机器学习框架ML.NET----二元分类情绪分析

C#开源跨平台机器学习框架ML.NET----结合SqlSugar进行多类分类

数据库及其它

《Oracel存储过程写报表实战》

《Delphi轮播视频和图片程序(用于双屏显示程序)

《SQL随机增加销售数据的脚本编写(附脚本下载地址)

SQL Server中With As的介绍与应用(三)--递归的实战应用

《Oracle通过ODBC连接SQL Server数据库

Oracle利用row_number()over()方式解决插入数据时重复键的问题

 

请扫码

给个关注

微卡智享

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Android,ViewPager可以通过PagerAdapter来动态加载View。PagerAdapter是一个抽象类,需要实现以下方法: 1. getCount():返回ViewPager的View数量。 2. instantiateItem():创建并返回指定位置的View。 3. destroyItem():销毁指定位置的View。 具体实现步骤如下: 1. 创建一个继承自PagerAdapter的类,实现上述三个方法。 2. 在instantiateItem()方法,根据指定位置创建View,并将其添加到ViewPager。 3. 在destroyItem()方法,将指定位置的View从ViewPager移除。 4. 在使用ViewPager时,将PagerAdapter的实例设置给ViewPager。 示例代码如下: ``` public class MyPagerAdapter extends PagerAdapter { private List<View> mViewList; public MyPagerAdapter(List<View> viewList) { mViewList = viewList; } @Override public int getCount() { return mViewList.size(); } @Override public Object instantiateItem(ViewGroup container, int position) { View view = mViewList.get(position); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { View view = mViewList.get(position); container.removeView(view); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } } ``` 使用时,可以先创建一个List<View>,然后将需要显示的View添加到List,并将List传入MyPagerAdapter的构造函数。最后将MyPagerAdapter的实例设置给ViewPager即可。 ``` List<View> viewList = new ArrayList<>(); viewList.add(view1); viewList.add(view2); viewList.add(view3); MyPagerAdapter adapter = new MyPagerAdapter(viewList); viewPager.setAdapter(adapter); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vaccae

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值