从Sd卡获得图片
GetPhoto.java
public class GetPhoto {
public static File getPhoto(Context context) {
//1.获取外部存储器,也就是SD卡的目录
File sdCard = Environment.getExternalStorageDirectory();
//2.使用文件路径字符串来创建一个File实例
File file = new File(sdCard, "photo");
//3.根据资源ID解析出图片资源
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.rrr);
if (sdCard.equals(Environment.MEDIA_MOUNTED)) {
try {
//4.File不能访问文件内容本身,需要用输入、输出流来访问
FileOutputStream out = new FileOutputStream(file);
//5.保存位图,第一个参数是位图的压缩格式 JPEG/PNG/WEBP ,第二个参数是压缩质量(比如30,就是压缩70%,100就是不压缩
// ),第三个参数,把图片位图 保存到字节流中
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return file;
}
}
主界面
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btnStart).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//action:<action android:name="android.intent.action.VIEW"/>
//category:<category android:name="android.intent.category.DEFAULT"/>
//Intent.ACTION_VIEW 查看指定的数据
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(GetPhoto.getPhoto(MainActivity.this)),"image/*");
//匹配到photoBrower的Activity,启动这个组件
startActivity(i);
}
});
}
}
3.显示图片
public class PhotoBrower extends AppCompatActivity {
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo_brower);
iv = (ImageView) findViewById(R.id.iv);
iv.setImageURI(getIntent().getData());
}
}
只是这样有个问题,点击按钮的时候,,是先将一个图片资源封装成bitmap,然后通过输出流,把图片资源写入到SD卡的文件当中,然后把返回的文件对象返回给Intent 。这中间花费的时间太长了,有时候很容易造成界面假死的状态,性能实在太低,很容易引起内存溢出。这个我先学学下前辈们是怎么解决的,再写。
可以参考这篇文章,大神写:http://blog.csdn.net/guolin_blog/article/details/9316683