Android小例子:使用反射機制來讀取圖片制作一個圖片瀏覽器
阿新 • • 發佈:2017-09-20
onclick lac protected blank pri tar lec 存儲 current
效果圖:
工程文件夾:
該例子可供於新手參考練習,如果有哪裏不對的地方,望指正>-<
《黑幕下的人》
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小例子:使用反射機制來讀取圖片制作一個圖片瀏覽器