zoukankan      html  css  js  c++  java
  • Android网络图片异步加载

    部分源码如下:

    dialog= ProgressDialog.show(this,"","加载数据,请稍等 …",true,true);       
             //图片资源
            String url = "http://www.kzwlg.com.cn:1080/Wlg_server2/"+bundle.getString("pic");        
             //得到可用的图片
            getHttpBitmap(url);
    /**
         * 对图片进行大小缩放
         * @param bm
         * @param newWidth
         * @param newHeight
         * @return
         */
        protected Bitmap scaleImg(Bitmap bm, int newWidth, int newHeight) {
            // 图片源
            // Bitmap bm = BitmapFactory.decodeStream(getResources()
            // .openRawResource(id));
            // 获得图片的宽高
            int width = bm.getWidth();
            int height = bm.getHeight();
            // 设置想要的大小
            int newWidth1 = newWidth;
            int newHeight1 = newHeight;
            // 计算缩放比例
            float scaleWidth = ((float) newWidth1) / width;
            float scaleHeight = ((float) newHeight1) / height;
            // 取得想要缩放的matrix参数
            Matrix matrix = new Matrix();
            matrix.postScale(scaleWidth, scaleHeight);
            // 得到新的图片
            Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix,
              true);
            return newbm;
           }
    /**
         * 处理ImageView
         */
        final Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {        
                 switch (msg.what) {
                case 1:
                     image.setImageBitmap(scaleImg(bitmap, 300, 300));    
                     dialog.dismiss();  
                    break;
                default:
                    break;
                }
                
            }
        };
        /**
         * 从网络位置得到图片
         * 采用handler+Thread模式实现多线程异步加载
         * @param url
         * @return
         */
        private void getHttpBitmap( final String url) {
            
            Thread thread=new Thread(){
                public void run() {
                    URL myFileURL;            
                    
                    try{        
                        myFileURL=new URL(url);
                        //获得连接
                        HttpURLConnection conn=(HttpURLConnection)myFileURL.openConnection();
                         //设置超时时间为6000毫秒,conn.setConnectionTiem(0);表示没有时间限制
                        conn.setConnectTimeout(6000);
                        //连接设置获得数据流
                        conn.setDoInput(true);
                        //不使用缓存
                        conn.setUseCaches(false);
                        //这句可有可无,没有影响
                        //conn.connect();
                        //得到数据流
                        InputStream is = conn.getInputStream();
                        //解析得到图片
                        bitmap = BitmapFactory.decodeStream(is);
                        //关闭数据流
                        is.close();
                        
                        Message message = handler.obtainMessage();
                        message.what=1;
                        handler.sendMessage(message);
                        }catch(Exception e){
                            e.printStackTrace();
                        }                
    
                };
            };
            thread.start();
            thread=null;
        }
  • 相关阅读:
    用友U8 | 【存货管理】提示用户***正在记账,不允许并发。
    用友U8 | 怎么准确查找【采购入库单】、【采购发票】,对应的凭证号?
    用友U8 | 中途启用序列号管理,该怎么操作?
    Excel:提取身份证号中的性别
    给jupyter 添加代码自动补全功能
    SQL函数之:截断字符串
    解决Maven子项目提示 ‘parent.relativePath‘ of POM
    公共NTP资源汇总
    iperf3的使用
    ZeroTier的使用
  • 原文地址:https://www.cnblogs.com/xuewater/p/2624058.html
Copyright © 2011-2022 走看看