>>分享Android开发相关的技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 25388 个阅读者 刷新本主题
 * 贴子主题:  android异步更新UI 回复文章 点赞(0)  收藏  
作者:javathinker    发表时间:2020-03-31 22:08:03     消息  查看  搜索  好友  复制  引用

        android下面图片更新是需要启动多个子线程来进行的,而android下面是并不是线程安全的,所以thread这里是用不了的,只能用runnable接口。

         废话不多说了 直接上代码。

        1、下载线程  继承runnable接口
         public class DownloadImage implements Runnable {

           private ImageView p_w_picpathView;
                private String p_w_picpathUrl;
                private Bitmap bitmap;

               //构造的时候传入要更新的ImageView ,同时传入图片的URL
               public DownloadImage(ImageView p_w_picpathView, String p_w_picpathUrl) {
                   super();
                   this.p_w_picpathView = p_w_picpathView;
                   this.p_w_picpathUrl = p_w_picpathUrl;
               }
               public Handler handler = new Handler();

               Runnable updateResults = new Runnable() {

                   @Override
                   public void run() {
                 updateUI();
                  }
               };

               public void run() {

                   HttpGet httpRequest = null;
                   URL url;

                   try {

                      url = new URL(p_w_picpathUrl);

                     httpRequest = new HttpGet(url.toURI());

                     HttpClient httpclient = new DefaultHttpClient();

                     HttpResponse response = (HttpResponse) httpclient
                                           .execute(httpRequest);

                     HttpEntity entity = response.getEntity();

                     BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);

                     InputStream instream = bufHttpEntity.getContent();
                                       bitmap = BitmapFactory.decodeStream(instream);
                    } catch (Exception e) {
  
                      // TODO Auto-generated catch block

                     e.printStackTrace();
        }

                   handler.post(updateResults);
             }
             public void updateUI(){
             p_w_picpathView.setImageBitmap(bitmap);
             }
         }

     2、主程序

         ImageView p_w_picpathView = (ImageView)findViewById(R.id.p_w_picpath);

         String p_w_picpathUrl = "http://www.qqzhi.com/show/UploadPic/2010-5/2010521102357899.jpg";

          new Thread(new DownloadImage(p_w_picpathView, p_w_picpathUrl)).start();

         这些添加在oncreate()里面就实现了图片的更新了  

    3、配置文件AndroidManifest

    <uses-permission android:name="android.permission.INTERNET"/>

    获取访问网络权限

    4、布局文件

           <ImageView
                                  android:id="@+id/p_w_picpath"
                                  android:layout_width="wrap_content"
                                  android:layout_height="wrap_content"
                                  android:layout_x = "100px"
                                  android:layout_y = "100px"
                                  android:src="@drawable/icon"

         />

        OK,要实现的功能就完全实现了,你可以定义N个变量(就是你需要更新的图片),目前我测试一次更新20幅消耗时间1s。

         希望能对大家有所帮助,有兴趣可以一起讨论!

                                                                                      

----------------------------
原文链接:https://blog.51cto.com/alloxa/499424

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-04-07 10:06:02 重新编辑]
  Java面向对象编程-->输入与输出(上)
  JavaWeb开发-->使用过滤器
  JSP与Hibernate开发-->映射一对多关联关系
  Java网络编程-->通过JavaMail API收发邮件
  精通Spring-->Vue CLI脚手架工具
  Vue3开发-->计算属性和数据监听
  Android基础之用Eclipse搭建Android开发环境和创建第一个And...
  Android 控件布局实现卡片效果,阴影效果
  android 自动化测试之MonkeyRunner学习
  Android Gallery实现循环显示图像
  Android开发实践:用脚本编译Android工程
  Android 自定义Menu
  Android开发实践:编译VLC-for-Android
  Android静默安装的实现
  Android API 中Toast类的用法
  浅析Android的通知系统
  Android SDCard Mount 流程分析
  Scroll的原理和简单使用
  Android使用讯飞SDK开发语音识别及合成小Demo
  Android 活动(Activity)
  Android-商品展示案例
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。