熟悉Android---使用imageView加载网络图片
Posted 刘程佳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了熟悉Android---使用imageView加载网络图片相关的知识,希望对你有一定的参考价值。
补充
使用Glide框架只要一行代码就可以搞定图片的显示,功能更强大。都2022年了,有好用的框架那必须要用啊。Glide框架使用请移步至郭霖大神的博客:
https://blog.csdn.net/guolin_blog/article/details/53759439
前言
android 4.0 以后的版本,UI线程不允许有耗时操作,所以请求网络图片需要运行在子线程;
加载图片的代码参考:
https://zhidao.baidu.com/question/537762079.html
效果图
(待补充)
图片链接:
https://img-home.csdnimg.cn/images/20201124032511.png
示例图片:
布局文件
MainActivity.xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img1"/>
</LinearLayout>
整体思路
第一步:
在UI线程定义 网络图片链接;
第二步:
新建子线程请求图片,请求结果为bitmap;
第三步:
在UI线程将图片加载出来;
MainActivity.java
public class MainActivity extends Activity
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.img1);
URL url = null;
try
url = new URL("https://img-home.csdnimg.cn/images/20201124032511.png");
requestImg(url);
catch (Exception e)
e.printStackTrace();
private void requestImg(final URL imgUrl)
new Thread(new Runnable()
@Override
public 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()
@Override
public void run()
imageView.setImageBitmap(bitmap);
);
联想
第一步和第二应该可以合并在子线程中;
将bitmap声明为全局变量,第三步应该可以精简:
try
url = new URL("https://img-home.csdnimg.cn/images/20201124032511.png");
requestImg(url);
catch (Exception e)
e.printStackTrace();
imageView.setImageBitmap(bitmap);
这里我没有测试过,只是一些想法;
权限
在 Mainfest.xml文件中加入网络权限申请;
<uses-permission android:name="android.permission.INTERNET"/>
安卓 9 加强了保密性,导致无法进行非加密的 http 网络请求
解决方法:
在 AndroidManifest.xml 的 application 标签中新加:
android:usesCleartextTraffic=“true”
重新运行即可;
Android studio 使用 ImageView 加载 gif 文件
使用一个开源的图片加载和缓存的第三方框架 Android Glide 。
一、首先下载相应的 jar 包。
https://github.com/bumptech/glide/releases/download/v3.6.0/glide-3.6.0.jar
将 jar 包放进 libs 文件夹中,再导进工程中。
二、将 gif 文件放进 drawable 文件夹中
三、再 layout 中加入以下代码
<ImageView android:id="@+id/welcome_gif" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY"/>
其中,
android:scaleType="fitXY"
是为了适应屏幕,充满整个屏幕,android:scaleType 还有很多其他取值。
四、相应的 Activity 中,在onCreate 中加入以下代码
ImageView welcome_gif = (ImageView) findViewById(R.id.welcome_gif); Glide.with(this).load(R.drawable.welcome_mutouren).into(welcome_gif);
其中,R.id.welcome_gif 是 ImageView 的 id 号;R.drawable.welcome_mutouren 是放入的gif 文件
(图片来自 ui 中国)
博客参考:https://blog.csdn.net/zhangphil/article/details/45535693
下面的内容与主题无关了,只是实现这个欢迎加载界面时的一些记录。
一、停留在欢迎页面一定的时间。
在相应的 Activity 的 onCreate() 方法中加入以下代码
Timer timer=new Timer(); TimerTask timerTask=new TimerTask() { @Override public void run() { startActivity(intent); } }; timer.schedule(timerTask,2000);//此处的Delay可以是2*1000,代表两秒
Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。 TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。 用Timer线程实现和计划执行一个任务的基础步骤: 1.实现自定义的TimerTask的子类,run方法包含要执行的任务代码。 2.实例化Timer类,创建计时器后台线程。 3.制定执行计划。这里用schedule方法,第一个参数是TimerTask对象,第二个参数表示开始执行前的延时时间 (单位是milliseconds,这里定义了2000)。还有一种方法可以指定任务的执行时间。
二、从其他页面返回时不会再次执行这个欢迎界面。
在相应页面中改写 onPause() 方法
@Override protected void onPause(){ super.onPause(); finish(); }
以上是关于熟悉Android---使用imageView加载网络图片的主要内容,如果未能解决你的问题,请参考以下文章
如何在android studio中检查ImageView是不是已完成加载和图像