首页 > 系统 > Android > 正文

Android实现网络图片浏览功能

2019-12-12 02:45:17
字体:
来源:转载
供稿:网友

我们在上网的过程中经常看到各种图片,那你知道它是如何实现的吗?接下来就让我们一块探讨一下。

网络图片的浏览可以分为俩部分,基本的页面布局与界面交互,让我们一步步的来编写。

基本布局很简单,只需要有一个输入图片链接的EditText,一个浏览按钮,一个ImageView就差不多了。下面是简单代码。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  tools:context=".MainActivity" >  <ImageView    android:id="@+id/iv"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:layout_weight="1" />  <EditText    android:id="@+id/et_path"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:hint="请输入图片路径"    android:maxLines="1" />  <Button    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:onClick="click"    android:text="浏览" /></LinearLayout>

值得注意的是这里面的weight不是权重,而是渲染优先级,weight越大,优先级越低。

最重要的自然是界面交互,输入图片的指定地址,便可以将服务器返回的图片展示在界面上,具体如下

package cn.edu.bzu.imageviewdemo;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import android.view.View;import android.widget.EditText;import android.widget.ImageView;import android.widget.Toast;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;public class MainActivity extends AppCompatActivity { protected static final int CHANGE_UI = 1; protected static final int ERROR = 2; private EditText et_path; private ImageView iv; private Handler handler = new Handler(){  public void handleMessage(android.os.Message msg) {   if(msg.what == CHANGE_UI){    Bitmap bitmap = (Bitmap) msg.obj;    iv.setImageBitmap(bitmap);   }else if(msg.what == ERROR){    Toast.makeText(MainActivity.this, "显示图片错误", 0).show();   }  }; }; protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  et_path = (EditText) findViewById(R.id.et_path);  iv = (ImageView) findViewById(R.id.iv); } public void click(View view) {  final String path = et_path.getText().toString().trim();  if (TextUtils.isEmpty(path)) {   Toast.makeText(this, "图片路径不能为空", Toast.LENGTH_SHORT).show();  } else {   new Thread() {    public void run() {     try {      URL url = new URL(path);  //创建URL对象      HttpURLConnection conn = (HttpURLConnection) url        .openConnection();      // 设置请求的方式      conn.setRequestMethod("GET");      //设置超时时间      conn.setConnectTimeout(5000);      int code = conn.getResponseCode();      if (code == 200) {       InputStream is = conn.getInputStream();       Bitmap bitmap = BitmapFactory.decodeStream(is);       //iv.setImageBitmap(bitmap);       Message msg = new Message();       msg.what = CHANGE_UI;       msg.obj = bitmap;       handler.sendMessage(msg);      } else {       Message msg = new Message();       msg.what = ERROR;       handler.sendMessage(msg);      }     } catch (Exception e) {      e.printStackTrace();      Message msg = new Message();      msg.what = ERROR;      handler.sendMessage(msg);     }    };   }.start();  } }}

核心之处便是通过URL对象获取HttpURLConnection,获取服务器返回的输入流

这便是简单的测试结果。有问题欢迎评论交流!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表