res/raw和assets的相同点:
1.两者目录下的文件在打包后会原封不动的保存到apk包中,不会被编译成二进制。
2.两者目录下的文件都不能被修改,如果需要修改,需要先把文件拷贝到存储器里。
res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.raw.filename:assets文件夹的文件不会被映射到R.java中,访问的时候需要AssetsManger类。
2.res/raw不可以有目录结构。而assets则可以有目录结构,也就是assets目录下可以在建立文件夹。
Assets的事例:
public class MainActivity
extends Activity {
private RadioGroup radioGroup ;
private ImageView imageView ;
private AssetManager am ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
setContentView(R.layout. activity_main) ;
imageView =(ImageView) findViewById(R.id. image_view) ;
am = getAssets() ;
radioGroup = (RadioGroup)findViewById(R.id. radio_btn) ;
radioGroup.setOnCheckedChangeListener( new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group , int checkedId) {
switch (checkedId){
case R.id. btn_1:
Time time = new Time( "angry") ;
time.start() ;
break;
case R.id. btn_2:
Time time2 = new Time( "cymbal") ;
time2.start() ;
break;
case R.id. btn_3:
Time time3 = new Time( "drink") ;
time3.start() ;
break;
case R.id. btn_4:
Time time4 = new Time( "eat") ;
time4.start() ;
break;
case R.id. btn_5:
Time time5 = new Time( "fart") ;
time5.start() ;
break;
case R.id. btn_6:
Time time6 = new Time( "foot_right") ;
time6.start() ;
break;
case R.id. btn_7:
Time time7 = new Time( "foot_left") ;
time7.start() ;
break;
case R.id. btn_8:
Time time8 = new Time( "knockout") ;
time8.start() ;
break;
case R.id. btn_9:
Time time9 = new Time( "pie") ;
time9.start() ;
break;
case R.id. btn_10:
Time time10 = new Time( "scratch") ;
time10.start() ;
break;
case R.id. btn_11:
Time time11 = new Time( "stomach") ;
time11.start() ;
break;
}
}
}) ;
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg) ;
switch (msg. what){
case 1:
imageView.setImageBitmap((Bitmap) msg. obj) ;
break;
}
}
private RadioGroup radioGroup ;
private ImageView imageView ;
private AssetManager am ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
setContentView(R.layout. activity_main) ;
imageView =(ImageView) findViewById(R.id. image_view) ;
am = getAssets() ;
radioGroup = (RadioGroup)findViewById(R.id. radio_btn) ;
radioGroup.setOnCheckedChangeListener( new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group , int checkedId) {
switch (checkedId){
case R.id. btn_1:
Time time = new Time( "angry") ;
time.start() ;
break;
case R.id. btn_2:
Time time2 = new Time( "cymbal") ;
time2.start() ;
break;
case R.id. btn_3:
Time time3 = new Time( "drink") ;
time3.start() ;
break;
case R.id. btn_4:
Time time4 = new Time( "eat") ;
time4.start() ;
break;
case R.id. btn_5:
Time time5 = new Time( "fart") ;
time5.start() ;
break;
case R.id. btn_6:
Time time6 = new Time( "foot_right") ;
time6.start() ;
break;
case R.id. btn_7:
Time time7 = new Time( "foot_left") ;
time7.start() ;
break;
case R.id. btn_8:
Time time8 = new Time( "knockout") ;
time8.start() ;
break;
case R.id. btn_9:
Time time9 = new Time( "pie") ;
time9.start() ;
break;
case R.id. btn_10:
Time time10 = new Time( "scratch") ;
time10.start() ;
break;
case R.id. btn_11:
Time time11 = new Time( "stomach") ;
time11.start() ;
break;
}
}
}) ;
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg) ;
switch (msg. what){
case 1:
imageView.setImageBitmap((Bitmap) msg. obj) ;
break;
}
}
};
Assets根下的文件名:
private String[]
getFileName(String name){
String[] files = null;
try {
files = am.list(name) ;
Log. d( "--->" , ""+files. length) ;
} catch (IOException e) {
e.printStackTrace() ;
}
return files ;
String[] files = null;
try {
files = am.list(name) ;
Log. d( "--->" , ""+files. length) ;
} catch (IOException e) {
e.printStackTrace() ;
}
return files ;
}
Assets根下的每一项里面的内容:
private Bitmap
getFileBitmap(String fileName){
Bitmap bitmap ;
InputStream in = null;
try {
in = am.open(fileName) ;
} catch (IOException e) {
e.printStackTrace() ;
}
bitmap = BitmapFactory. decodeStream(in) ;
return bitmap ;
}
public class Time extends Thread{
private String path ;
public Time(String path){
this. path = path ;
}
@Override
public void run() {
super.run() ;
String[] imageName = getFileName( path) ;
try {
for ( int i= 0 ;i<imageName. length ;i++){
Bitmap bitmap ;
InputStream in = null;
try {
in = am.open(fileName) ;
} catch (IOException e) {
e.printStackTrace() ;
}
bitmap = BitmapFactory. decodeStream(in) ;
return bitmap ;
}
public class Time extends Thread{
private String path ;
public Time(String path){
this. path = path ;
}
@Override
public void run() {
super.run() ;
String[] imageName = getFileName( path) ;
try {
for ( int i= 0 ;i<imageName. length ;i++){
sleep(150);
在get里面填写的是路径:
Bitmap bitmap = getFileBitmap(
path+
"/"+imageName[i])
;
Message msg = new Message() ;
msg. what = 1 ;
msg. obj = bitmap ;
handler.sendMessage(msg) ;
}
} catch (InterruptedException e) {
e.printStackTrace() ;
}
}
}
}
Message msg = new Message() ;
msg. what = 1 ;
msg. obj = bitmap ;
handler.sendMessage(msg) ;
}
} catch (InterruptedException e) {
e.printStackTrace() ;
}
}
}
}