美文网首页
两种方式实现网络图片查看器

两种方式实现网络图片查看器

作者: Maybe_G | 来源:发表于2017-11-21 12:44 被阅读0次

分别采用两种方法实现网络图片查看器。
效果如图所示。

微信截图_20171121124018.png
  • 01 在子线程里面执行耗时操作,在主线程更新UI
public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button button;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)findViewById(R.id.bt_view);
        imageView = (ImageView)findViewById(R.id.image_view);
        button.setOnClickListener(this);

    }

    //UI只能在主线程更新,利用Handler来将更新UI的操作从子线程切换到主线程上,即将获取的图片显示在屏幕上
    Handler handler = new Handler(){
        public void handleMessage(Message msg){
            Bitmap bitmap = (Bitmap)msg.obj;
            if(bitmap == null){
                Toast.makeText(MainActivity.this,"获取失败...",Toast.LENGTH_SHORT).show();
            }else{

                imageView.setImageBitmap(bitmap);
            }
        }
    };

    //button点击监听,创建一个子线程处理连接网络获取图片的耗时操作
    public void onClick(View v){
        final String path = "http://192.168.107.2:8080/pro2.png";
        new Thread(new Runnable() {
            @Override
            public void run() {
                //获取Bitmap类型的图片信息
                Bitmap bitmap = getImage(path);
                Message msg = new Message();
                //向Handler传递图片信息
                msg.obj = bitmap;
                handler.sendMessage(msg);
            }
        }).start();
    }
    //获取图片数据
    public Bitmap getImage(String path){
        try {
            //2.获取URL对象
            URL url = new URL(path);
            //3.获取连接对象
            final HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            //4.初始化
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            conn.connect();
            //如果conn.getResponseCode()==200,则表示连接成功
            if(conn.getResponseCode() == 200){
                //获取图片数据流
                InputStream is = conn.getInputStream();
                //BitmapFactory加工成Bitmap格式
                Bitmap bitmap = BitmapFactory.decodeStream(is);
                return bitmap;
            }
        } catch (Exception e) {
            e.printStackTrace();

        }
        return null;
    }
}
  • 02 使用异步机制AsyncTask
public class MainActivity extends AppCompatActivity{

    private Button button;
    private ImageView imageView;
    private GetNetPic getPic;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)findViewById(R.id.bt_view);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String path = "http://192.168.107.2:8080/pro2.png";
                getPic = new GetNetPic();
                //这里是调用execute()方法,触发异步任务的执行
                getPic.execute(path);
            }
        });
        imageView = (ImageView)findViewById(R.id.image_view);
    }

    class GetNetPic extends AsyncTask<String,Bitmap,Bitmap>{
        @Override
        protected Bitmap doInBackground(String... params) {
            try {
                //2.获取URL对象
                URL url = new URL(params[0]);
                Log.d("GetNetPic","params[0] = " + params[0]);
                //3.获取连接对象
                final HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                //4.初始化
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(5000);
                conn.connect();
                //如果conn.getResponseCode()==200,则表示连接成功
                if(conn.getResponseCode() == 200){
                    Log.d("GetNetPic","OK");
                    //获取图片数据流
                    InputStream is = conn.getInputStream();
                    //BitmapFactory加工成Bitmap格式
                    Bitmap bitmap = BitmapFactory.decodeStream(is);
                    return bitmap;
                }else {
                    Log.d("GetNetPic","Not OK");
                }
            } catch (Exception e) {
                e.printStackTrace();

            }
            return null;
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {

            super.onPostExecute(bitmap);
            if(bitmap == null){
                Toast.makeText(MainActivity.this,"获取失败...",Toast.LENGTH_SHORT).show();
            }else{
                imageView.setImageBitmap(bitmap);
            }
        }
    }

相关文章

  • 两种方式实现网络图片查看器

    分别采用两种方法实现网络图片查看器。效果如图所示。 01 在子线程里面执行耗时操作,在主线程更新UI 02 使用异...

  • Android 自定义圆形头像1.0

    两种方式 1本地获取图片 2通过网络获取网络图片通过BitmapShader转为圆形图片 两种方式的实现方法相同,...

  • 安卓图片缩放原理

    通过设置ImageView的Matrix,可以对图片做缩放的效果,很多图片查看器也是通过这种方式来实现的。1.那么...

  • iOS图片尺寸相关

    以下对同一张图片做了图片查看器看到的图片的尺寸和代码打印的图片尺寸两种方式的查看。开发时是以代码打印的图片尺寸为准...

  • android笔记-网络编程1

    网络图片查看器(掌握) 确定图片的网址 发送http请求 URL url = new URL(address);...

  • flutter 图片

    加载网络图片网络图片 加载本地图片效果 实现图片圆角的几种方式 CircleAvatarCircleAvatar ...

  • sld样式中加载图片

    在Geoserver的sld样式文件中,有时需要用户自定义的图片。有两种方式实现:1、加载http网络图片(目前没...

  • Android界面过度动画的前世今生

    前一段时间做图片查看器的升级时,在打开图片查看器的时,找不到好的过渡方式。 同时大佬推荐了Android最新的Ma...

  • bpmn.js

    一、bpmn.js的两种用法: 1.作为BPMN 2.0流程图的一个查看器。实现方式为:将后缀名为.bpmn的文件...

  • Windows 10 设置

    补充: 使用传统的图片查看器 手动方式:在HKEY_LOCAL_MACHINE\SOFTWARE\Microsof...

网友评论

      本文标题:两种方式实现网络图片查看器

      本文链接:https://www.haomeiwen.com/subject/ckoivxtx.html