• 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;
        }
  • 相关阅读:
    DataTable:数据库到程序的桥梁
    《Javascript高级程序设计》阅读记录(三):第五章 上
    《Javascript高级程序设计》阅读记录(二):第四章
    javascript获取窗口位置、绝对位置、事件位置等
    《Javascript高级程序设计》阅读记录(一):第二、三章
    调试用随笔
    C#值类型和引用类型
    vue使用vue-awesome-swiper及一些问题
    npm与yarn命令对比
    npm与nrm
  • 原文地址:https://www.cnblogs.com/xuewater/p/2624058.html
Copyright © 2020-2023  润新知