BitmapFactory
1,介绍:
从各种来源创建位图对象(包括文件、流和字节数组.)
2,常用方法:
3,图片查看器demo:
【1】布局
【2】代码:
a.获取ID 创建click 利用HttpURLConnection请求网络
b.请求成功获取到的流利用BitmapFactory.decodeStream()转换成bitmap位图
c. 利用handler 进行更新UI
d.添加获取网络权限
<uses-permission android:name="android.permission.INTERNET"/>
package com.ithiema.sourcelook;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.ithiema.imglook.R;
public class MainActivity extends Activity {
private TextView tv_content;
private EditText et_urlpath;
private ImageView iv;
protected static final int REQUESTSUCESS = 0; //ctrl + shift + X 变大写
protected static final int REQUESTFAIL = 1;
protected static final int REQUESTEXCEPTION= 2;
//定义一个handler
private Handler handler = new Handler(){
//在这个方法里面处理消息
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case REQUESTSUCESS:
//[1]获取我们携带的数据
Bitmap bitmap = (Bitmap) msg.obj;
//[2]把btimap展示到imagview上
iv.setImageBitmap(bitmap);
break;
case REQUESTFAIL:
iv.setImageBitmap(null);
Toast.makeText(getApplicationContext(), "图片不存在", 1).show();
break;
case REQUESTEXCEPTION:
iv.setImageBitmap(null);
Toast.makeText(getApplicationContext(), "图服务器忙", 1).show();
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载布局
setContentView(R.layout.activity_main);
// [1]获取我们关心的控件
iv = (ImageView) findViewById(R.id.iv);
et_urlpath = (EditText) findViewById(R.id.et_urlpath);
}
// 实现按钮点击事件
public void click(View v) {
//[0]把耗时的操作放到子线程里面
//创建一个子线程
new Thread() {
public void run() {
try {
// [1]获取要访问url路径
String path = et_urlpath.getText().toString().trim();
// [2]创建一个url对象 指定要访问的url路径
URL url = new URL(path);
// [3]通过url对象获取HttpURLConnection 像服务器发送一个请求
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//[4]设置请求的方式
conn.setRequestMethod("GET"); //默认是get 注意:get要大写
//[5]设置访问的连接时间
conn.setConnectTimeout(5000);
//[6]获取服务器返回的状态码
int code = conn.getResponseCode();
//[7]当状态码是200的时候 代表请求成功 获取服务器返回的数据 数据都是以流的形式返回
if(code == 200){
InputStream in = conn.getInputStream();
//[8]把in转换成bitmap
Bitmap bitmap = BitmapFactory.decodeStream(in);
//[8.1]获取message对象 使用obtain方法避免创建过多的对象
Message msg = Message.obtain();
msg.obj = bitmap;
msg.what = REQUESTSUCESS;
handler.sendMessage(msg);
//[9]把数据展示到imageview上 位图(bitmap) 和 矢量图
}else {
Message msg = Message.obtain();
msg.what = REQUESTFAIL;
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
Message msg = Message.obtain();
msg.what = REQUESTEXCEPTION;
handler.sendMessage(msg);
}
}
}.start();
}
}