Android获取asset下的资源图片

MainActivity如下:

package cc.testasset;

import java.io.InputStream;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

/**
 * Demo描述:
 * 获取asset下的资源图片
 *
 * 注意事项:
 * 1 不可以获得asset下某个文件夹中某资源的绝对路径.
 *   因为asset是要打包到apk中的
 * 2 有人说:
 *   String filePath = "file:///android_asset/文件名";
 *   可以表示一个文件的路径.经过测试,该方法不靠谱.
 *   可参见代码.
 */
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}

	private void init(){
		//测试一:获取asset下图片资源
		try {
			AssetManager assetManager = getAssets();
			InputStream is = assetManager.open("Fresh_01.jpg");
			//以下注释掉的代码不靠谱.若采用,会有异常
			//InputStream is = assetManager.open("file:///android_asset/Fresh_01.jpg");
			Bitmap bitmap = BitmapFactory.decodeStream(is);
			if (bitmap != null) {
				System.out.println("测试一:width=" + bitmap.getWidth() + " ,height="+ bitmap.getHeight());
			} else {
				System.out.println("bitmap == null");
			}
		} catch (Exception e) {
			System.out.println("异常信息:" + e.toString());
		}

		System.out.println("======================");

		//测试二:获取asset下某个文件夹中的图片资源
		try {
			AssetManager assetManager = getAssets();
			InputStream is = assetManager.open("ml_lszn_Fresh/Fresh_02.jpg");
			Bitmap bitmap = BitmapFactory.decodeStream(is);
			if (bitmap != null) {
				System.out.println("测试二:width=" + bitmap.getWidth() + " ,height="+ bitmap.getHeight());
			} else {
				System.out.println("bitmap == null");
			}
		} catch (Exception e) {
			System.out.println("异常信息:" + e.toString());
		}

		System.out.println("======================");

		// 测试三:遍历asset下某个文件夹中的所有图片资源
		try {
			InputStream is=null;
			Bitmap bitmap=null;
			String dirPath="ml_lszn_Fresh";
			String photoName=null;
			AssetManager assetManager = getAssets();
			//使用list()方法获取某文件夹下所有文件的名字
			String [] photos=assetManager.list(dirPath);
			for (int i = 0; i < photos.length; i++) {
				photoName=photos[i];
				//利用dirPath+"/"+photoName组拼某文件完整路径
				is = assetManager.open(dirPath+"/"+photoName);
				bitmap = BitmapFactory.decodeStream(is);
				System.out.println("测试三: i="+i+" ,width=" + bitmap.getWidth() + " ,height="+ bitmap.getHeight());
			}
		} catch (Exception e) {
			System.out.println("异常信息:" + e.toString());
		}

	}

}

main.xml如下:

<RelativeLayout 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"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取asset下的资源图片"
        android:layout_centerInParent="true" />

</RelativeLayout>
时间: 2024-09-28 07:15:16

Android获取asset下的资源图片的相关文章

Android获取SD卡中选中图片的路径(URL)示例

一个图片上传功能需要提供上传图片在SD卡中的路径,总结了网上的一些列子,修改了一下,代码很简单,感兴趣的朋友可以参考下哈,希望对大家有所帮助   最近在做一个图片上传的功能,需要提供上传图片在SD卡中的路径,在网上看了些例子,改改调试成功,代码很简单.其布局文件如下: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://

Android获取SD卡中选中图片的路径(URL)示例_Android

最近在做一个图片上传的功能,需要提供上传图片在SD卡中的路径,在网上看了些例子,改改调试成功,代码很简单.其布局文件如下: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill

android换肤功能 如何动态获取控件中背景图片的资源id?_Android

这个是在在做一个换肤功能时遇到的问题.   对于换肤,网上都有示例,可以从别的皮肤安装包中读取所要的资源,前提是你必须先持有这个资源的引用名称,像R.drawable.background(喂,这不是废话嘛).这个换肤的方案原理就是,自身应用的资源名称是R.drawable.background,那皮肤包中应该也是这个名称,然后通过这个名称获取该资源在皮肤包中的具体id,代码: //先获取本地资源引用名称,type name是R.drawable.background中的"drawable&qu

android换肤功能 如何动态获取控件中背景图片的资源id?

这个是在在做一个换肤功能时遇到的问题. 对于换肤,网上都有示例,可以从别的皮肤安装包中读取所要的资源,前提是你必须先持有这个资源的引用名称,像R.drawable.background(喂,这不是废话嘛).这个换肤的方案原理就是,自身应用的资源名称是R.drawable.background,那皮肤包中应该也是这个名称,然后通过这个名称获取该资源在皮肤包中的具体id,代码: //先获取本地资源引用名称,type name是R.drawable.background中的"drawable"

在Android开发中替换资源图片不起作用的解决方法_Android

现象 在android开发中,经常会需要替换res\drawable中的图片,打开res\layout下的文件预览布局页面发现图片已经被替换,但在模拟器或者真实机器上运行时发现该图片并没有被替换,还是使用的是原来的资源图片. 原因 在开发过程中,由于使用模拟器测试了程序,在首次运行后会将res文件夹下的图片资源文件(如drawable-hdpi.drawable-ldpi和drawable-mdpi)拷贝到bin文件夹下.在替换资源图片后,eclipse并不清楚是否有图片改变,所以会使用原来bi

StateBackgroundUtil - 仅使用一张资源图片为View设置具有按下效果的背景

该篇文章主要介绍,如何使用一张资源图片为 View 设置具有按下效果的 background drawable.  缘起 前段时间在开发项目新版本的过程中,设计师出了一套项目的按下效果规范.规范大概是这样的. 对于一般的按钮,按钮按下的效果只有两种不同的实现. 1.按下后将前置背景图片变暗,具体就是在正常状态的 drawable 上面增加一层 20% 的黑色遮罩. 2.按下后降低前置背景资源透明度,具体就是在按下时改变正常状态的 drawable 透明度为原来的 70% . 很明显,这套规范会带

真机-android读取assets下的mp3文件的title、author、专辑图片等信息

问题描述 android读取assets下的mp3文件的title.author.专辑图片等信息 应该如何获取? 我用的方法是,先在sd卡上写一个mp3文件,再调用cursor来访问MediaStore.但问题是我是真机调试,可以看到手机中确实存在了这个文件,但uri读不到,直接电脑中打开也看不到这个文件,没有隐藏文件,也设置了读写权限.另一个问题是我担心这样做反复读写,跑起来会很慢.请问怎么解决 解决方案 试试在res建个raw把音乐放里面试试

android 获取本地图片 并用遮罩显示成带有圆心边框的圆形图

问题描述 android 获取本地图片 并用遮罩显示成带有圆心边框的圆形图 有一个需求,获取本地图片或者拍照,然后将图片用遮罩效果做成圆形并且带有边框的样式如图所示,,获取本地图片和拍照会做,但是不知道怎么用遮罩效果做成那种效果,,,求解,,,谢谢....最好有具体代码实现 解决方案 用遮罩的方式已经解决,,,,,,,, 解决方案二: Picasso框架简单快速高效 解决方案三: 你最好了解一下最新的fresco框架,你说的需求,里面都可以实现,只要你引用就可以了! 解决方案四: android

android获取服务器上的图片,如何用网格的形式显示出来(类似于相册)

问题描述 android获取服务器上的图片,如何用网格的形式显示出来(类似于相册) 用ListView只能一行显示一块内容,我想一行显示两个item,或者三个,同时支持下拉刷新,下拉加载更多的功能,求大神给我个思路.. 解决方案 1.使用gridview, 2.直接使用listview,每个item中包含两个或者三个bitmap,然后刷新时一次加载2的倍数或者3的倍数的元素 3.下拉刷新,加载更多直接参考pulltorefresh 解决方案二: http://www.cnblogs.com/li