前阵子因为项目原因,也一直在更新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; }
代码实现
创建项目
我们新建一个项目RecyclerViewImage的项目,然后布局在activity_main.xml布局文件中加入一个ImageView和4个Button
02
创建imgdeal的类
创建一个imgdeal的类,把我们的核心代码加进去, getImageResourable方法第二个参数名称这块要注意,这里就是检查含有我们输入名称的文件进行加载
在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;