标签:content eset try 路径 效果 thread request map 网络图
写一个类继承ImageView
package com.example.dell.myapplication; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.widget.ImageView; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /** * Created by dell on 2017/8/3. */ public class MyImageView extends ImageView { //子线程不能操作UI,通过Handler设置图片 private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { Bitmap bitmap = (Bitmap) msg.obj; setImageBitmap(bitmap); } }; public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MyImageView(Context context) { super(context); } public MyImageView(Context context, AttributeSet attrs) { super(context, attrs); } public void setImageURL(final String path){ //开启一个线程用于联网 new Thread(){ @Override public void run() { try { //把传过来的路径转成URL URL url = new URL(path); //获取连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //使用GET方法访问网络 connection.setRequestMethod("GET"); //超时时间为10秒 connection.setConnectTimeout(10000); //获取返回码 int code = connection.getResponseCode(); if (code == 200){ InputStream inputStream = connection.getInputStream(); //使用工厂把网络的输入流生产Bitmap Bitmap bitmap = BitmapFactory.decodeStream(inputStream); //利用Message把图片发给Handler Message msg = Message.obtain(); msg.obj = bitmap; handler.sendMessage(msg); } } catch (IOException e) { e.printStackTrace(); } } }.start(); } }
在布局上不能使用ImageView,要使用MyImageView
<Button android:text="Button" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button" /> <com.example.dell.myapplication.MyImageView android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" />
在MainActivity上设置图片
final MyImageView myImageView = (MyImageView) findViewById(R.id.image_view); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myImageView.setImageURL("https://pic.cnblogs.com/avatar/1142647/20170416093225.png"); } });
最后别忘了添加访问网络的权限
<uses-permission android:name="android.permission.INTERNET"/>
效果图
标签:content eset try 路径 效果 thread request map 网络图
原文地址:http://www.cnblogs.com/yeyupiaoling/p/7281332.html