准备工作:在文件中/assets目录下放几张图片,布局很简单,一个ImageView 一个Button。单击按钮会显示下一张图片。
布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="300dp"
/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
Android文档中对list(),open()的介绍如下:
一:list()
public final java.lang.String[] list(java.lang.String path) throws java.io.IOException
-
Parameters:
-
path
- A relative path within the assets, i.e., "docs/home.html".
Returns:
- String[] Array of strings, one for each asset. These file names are relative to 'path'. You can open the file by concatenating 'path' and a name in the returned string (via File) and passing that to open(). Throws:
-
java.io.IOException
参数是文件路径名,返回的是String数组。
二:open()
public final java.io.InputStream open(java.lang.String fileName) throws java.io.IOException
-
Parameters:
-
fileName
- The name of the asset to open. This name can be hierarchical.
Throws:
-
java.io.IOException
- 重载的有:
参数是文件名,返回的是InputStream流。默认ACCESS_STREAMING模式。
public final java.io.InputStream open(java.lang.String fileName, int accessMode) throws java.io.IOException
public class MainActivity extends Activity {
int currentImg = 0;
String[] images;
AssetManager assets;
ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.imageView1);
try{
assets = getAssets();
//获取/assets目录下所有文件
images = assets.list("");
}catch(IOException e)
{
e.printStackTrace();
}
final Button bn = (Button) findViewById(R.id.button1);
bn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//找下一个图片文件
while(!images[currentImg].endsWith(".png")&&
!images[currentImg].endsWith(".jpg")&&
!images[currentImg].endsWith(".gif"))
{
currentImg++;
currentImg%=images.length;
}
InputStream assetfile = null;
try{
//打开指定资源的输入流
assetfile = assets.open(images[currentImg++]);
currentImg%=images.length;
}catch(IOException e){
e.printStackTrace();
}
BitmapDrawable bitmapDrawable = (BitmapDrawable) image.getDrawable();
//如果图片还没回收,先强制回收该图片
if(bitmapDrawable != null && !bitmapDrawable.getBitmap().isRecycled()){
bitmapDrawable.getBitmap().recycle();
}
//改变显示的图片
image.setImageBitmap(BitmapFactory.decodeStream(assetfile));
}
});
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}