补充
使用Glide框架只要一行代码就可以搞定图片的显示,功能更强大。都了,有好用的框架那必须要用啊。Glide框架使用请移步郭霖大神的博客:
/guolin_blog/article/details/53759439
前言
4.0以后的版本,UI线程不允许有耗时操作,所以请求网络图片需要运行在子线程;
加载图片的代码参考:
/question/537762079.html
效果图
图片链接:
/images/user_3.jpg
布局文件
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/img1"/></LinearLayout>
MainActivity
第一步:
在UI线程定义 网络图片链接;
第二步:
新建子线程请求图片,请求结果为bitmap;
第三步:
在UI线程将图片加载出来;
public class MainActivity extends Activity {private ImageView imageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView = findViewById(R.id.img1);URL url = null;try {url = new URL("/images/user_3.jpg");requestImg(url);} catch (MalformedURLException e) {e.printStackTrace();}}private void requestImg(final URL imgUrl){new Thread(new Runnable() {@Overridepublic void run() {Bitmap bitmap = null;try {bitmap = BitmapFactory.decodeStream(imgUrl.openStream());showImg(bitmap);} catch (IOException e) {e.printStackTrace();}}}).start();}private void showImg(final Bitmap bitmap){runOnUiThread(new Runnable() {@Overridepublic void run() {imageView.setImageBitmap(bitmap);}});}}
联想
第一步和第二应该可以合并在子线程中;
将bitmap声明为全局变量,第三步应该可以精简:
try {url = new URL("/images/user_3.jpg");requestImg(url);} catch (MalformedURLException e) {e.printStackTrace();}imageView.setImageBitmap(bitmap);
这里我没有测试过,只是一些想法;
权限
在 Mainfest.xml文件中加入网络权限申请;
<uses-permission android:name="android.permission.INTERNET"/
运行即可;