第一个小应用:图片浏览器 之五 动手开发

从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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值