Android小例子:使用反射机制来读取图片制作一个图片浏览器
效果图:


工程文件夹:
该例子可供于新手参考练习,如果有哪里不对的地方,望指正>-<
《黑幕下的人》
java代码(MainActivity.java):
package com.example.imageswitchtest; import java.lang.reflect.Field; import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast; public class MainActivity extends Activity { private int[] imgs = null ;//存放图片地址
private int currentImgIndex ; //当前图片的标识号
private ImageView img = null ;
private Button btnUp = null ;
private Button btnNext = null ; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); img = (ImageView)findViewById(R.id.img);
btnUp = (Button)findViewById(R.id.btn_up);
btnNext = (Button)findViewById(R.id.btn_next); //初始化
init();
img.setImageResource(imgs[1]);
currentImgIndex = 1; //为Button设置监听事件
btnUp.setOnClickListener(new ButtonOnClick());
btnNext.setOnClickListener(new ButtonOnClick()); } /**
* 使用反射机制读取图片资源,存储到imgs数组里面
*/
public void init(){
Field[] fields = R.drawable.class.getFields();//反射读取R.drawable
imgs = new int[fields.length] ;//实例化imgs数组
for(int i = 0 ; i < fields.length ; i++){//遍历fields
try {
//测试出现的问题是:imgs[0]值会默认为ic_launcher
Log.d("field[" + i +"]", fields[i].getName() + "");//测试
if(fields[i].getName().indexOf("pic_")>-1){//过滤图片,以pic_开头的图片名
imgs[i] = fields[i].getInt(R.drawable.class);//获取该图片存储地址,储存到imgs数组里面
Log.d("field[" + i +"]", fields[i].getName() + "");//测试
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
} /**
*
* @author black sky
* @使用 Button的单击事件监听处理类
*/
private class ButtonOnClick implements View.OnClickListener{
@Override
public void onClick(View view) {
int id = view.getId();//获取监听到被单击的组件ID
switch(id){//识别ID
case R.id.btn_up://上一张图片按钮被单击执行的方法
if(currentImgIndex>1){//当前图片标识号不是第一张
currentImgIndex--;//标识号-1 }else{//是第一张
//提示是第一张图片
Toast.makeText(MainActivity.this, "这已经是第一张图片!", Toast.LENGTH_SHORT).show();
}
break;
case R.id.btn_next://下一张图片按钮被单击执行的方法
if(currentImgIndex<imgs.length-1){//当前图片标识号不是最后一张
currentImgIndex++;//标识号+1
}else{//是最后一张
//提示是最后一张图片
Toast.makeText(MainActivity.this, "这已经是最后一张图片!", Toast.LENGTH_SHORT).show();
}
break;
}
img.setImageResource(imgs[currentImgIndex]);//显示图片
} } }
xml代码(activity_main.xml):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.imageswitchtest.MainActivity" > <ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<Button
android:id="@+id/btn_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上一张图片"/>
<Button
android:id="@+id/btn_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下一张图片"/>
</LinearLayout> </LinearLayout>
例子下载链接为:https://files.cnblogs.com/files/hmxin/ReadBookProject.zip
Android小例子:使用反射机制来读取图片制作一个图片浏览器的更多相关文章
- 利用java反射机制实现读取excel表格中的数据
如果直接把excel表格中的数据导入数据库,首先应该将excel中的数据读取出来. 为了实现代码重用,所以使用了Object,而最终的结果是要获取一个list如List<User>.Lis ...
- DirectX11--深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架
前言 如果之前你是跟随本教程系列学习的话,应该能够初步了解Effects11(现FX11)的实现机制,并且可以编写一个简易的特效管理框架,但是随着特效种类的增多,要管理的着色器.资源等也随之变多.如果 ...
- java反射机制_读取properties
代码: import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 反射特点: ...
- 每天2个android小例子----简单计算器源代码
通过Android4.0 网格布局GridLayout来实现一个简单的计算器界面布局 package com.android.xiong.gridlayoutTest; import java.mat ...
- Android 小例子服务端
这是之前发布的Android项目的服务端源码,只是简单的根据请求返回了一些测试数据,没有实现对数据库的操作,可以根据需求自己实现. 这是mvc4 WebAPI项目,需要用vs2012打开. 如果是用的 ...
- android 小工具:pc 上用 curl 命令打开手机浏览器,浏览指定网址
测试 API 时或其它情况经常需要在手机浏览器中输入 url 一长串的 url 输起来真是麻烦 AirDroid 很强大也不用数据线,但有时老断开连接,不是很爽.发到手机 qq 吧还得手动粘贴 所以自 ...
- 【转】 Pro Android学习笔记(九三):AsyncTask(2):小例子
目录(?)[-] 继承AsyncTask UI操作接口 使用AsyncTask 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn. ...
- Android反射机制实现与原理
本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或 ...
- (转)个例子让你了解Java反射机制
个例子让你了解Java反射机制 原文地址:http://blog.csdn.net/ljphhj/article/details/12858767 JAVA反射机制: 通俗地说,反射机制就是可 ...
随机推荐
- Scrum过程管理学习心得
认识敏捷开发 在课堂上了解了瀑布开发,又在课下学习敏捷开发过程后,我发现,敏姐团队做的开发工作虽然和瀑布开发一模一样,但他们的做事方式很不一样.简单来说,两者的差别在于:瀑布开发必须先完成当前的步骤后 ...
- 零零碎碎的java知识:static属性、普通属性、static代码块、普通代码块、构造函数
本文中结论仅经本机测试,不保证在别的环境下成立.如果有什么不成立的地方务必告诉我_(:_」∠)_ java的内存是动态分配的,其机制和c/c++相当不一样……emmm在此不表. static: ·st ...
- 深度解析pos机,养卡人必看!
好多人对POS 好像都比较迷茫,这个说这个POS 好,那个说那个POS 好.下面就我对POS 的认知给兄弟们说下.对与不对的各位见谅. 第一.一清机 一清机是指在结算日结算后直接通过支付公司账号转 ...
- 爬虫入门之Scrapy框架实战(新浪百科豆瓣)(十二)
一 新浪新闻爬取 1 爬取新浪新闻(全站爬取) 项目搭建与开启 scrapy startproject sina cd sina scrapy genspider mysina http://roll ...
- 大数据学习---大数据的学习【all】
大数据介绍 什么是大数据以及有什么特点 大数据:是指无法在一定时间内用常规软件工具对其内容进行抓取.管理和处理的数据集合. 大数据是一种方法论:“一切都被记录,一切都被数字化,从数据中寻找需求,寻找知 ...
- Vim快捷输出查找寄存器的内容(去除\<,\>和\V)
Vim自带的*搜索会自动在单词两头加上\<和\>,使用第三方的vnoremap *,则是加上前缀\V, 当我们想要输出刚刚搜索的内容时可用<C-r>/,但是很可能会带上多余的符 ...
- MATLAB入门学习(一)
开始MATLAB入门啦,,,首先感谢xyy大神的帮助!然后我们开始学习吧!<( ̄︶ ̄)↗[GO!] 工作空间窗口:保存了你定义的常量,变量之类的,可以保存也可以被调用. 保存的话会生成一个mat ...
- Spring Framework5.0 学习(3)—— spring配置文件的三种形式
Spring Framework 是 IOC (Inversion of Control 控制反转)原则的实践. IoC is also known as dependency injection ...
- tmux分屏
网上很多教程: 新手教程: tmux进入 ctrl + b 命令 % 纵向分屏 命令 方向键 切换 https://lukaszwrobel.pl/blog/tmux-tutorial-split-t ...
- 2019.1.1 在重写的方法上面添加@Override注解方法报错解决办法
报错代码 The method transfer(Integer, Integer, Double) of type AccountServiceImpl must override a superc ...