Android开发,从网上下载指定地址的图片

Android开发,从网上下载指定地址的图片

安卓客户端界面的图标分为两类,
一类是存在 resource中的,这类图片是固定不变的,比如app下方标题栏“消息”,“联系人”,“设置”等图标是不变,除非版本更新才可能变化。
二类是客户端请求服务器,服务器响返回相应的图片,准确说应用的大部分图片背景都是从服务器返回的。
这个demo中,涉及Bitmap类型,对于Bitmap的相关知识,小白不是特别懂,感兴趣的朋友可以深入了解以下:
关于bitmap的总结-----徐福记456
具体操作方法如下:

  1. 在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
  1. 新建一个类,只有一个方法用于从网上下载图片,并存储于外部存储器,返回Bitmap类型:
    public static Bitmap loadPicture(String c_url){
    }
    httpurlPicture.java
    方法内容老规矩如下:
//实例化url
URL url = new URL(c_url);
//建立http连接
HttpUrlConnection conn = (HttpUrlConnection)url.openConnection();
//设置读取超时限制,设置请求方式
conn.setReadTimeOut(5000);
conn.setRequestMethod("GET");
//获取字节流
InputStream stream = new InputStream();
//设置文件名
String filename = String.valueOf(System.currentTimeMillis);
//声明读入路径
file enterpath = null;
//声明从外界读入流,从本地读取是FileInputStream
FileOutputStream fileOutputStream = null;
//获得外存储器的状态,只有Medio_Mouted(挂载且可读可写)
if(Environment.getExternalStorState().equals(Environment.MEDIO_MOUTED)){
  //获取外部存储器的目录路径
  File stor_path = Environment.getExternalStorDirection();
  //建立读入路径,两个参数,分别为外部目录,文件名
  enterpath = new File(stor_path,filename);
  //绑定读入路径的读入流
  fileOutputStream = new FileOutputStream(enterpath);
}
//设置一次性读入量
int lens=0;
//建立2M大小的缓冲区
byte bytes = new byte[2*1024];
//读入流不为空时,开始进入读取
if(fileOutputStream!=null){
   while((lens=stream.read(bytes)!=-1){//读入量不为空时
       fileOutputStream.write(bytes,0,lens);
   }
   //返回 下载文件的路径的全路径的文件
   return BitmapFactory.decodeFile(enterpath.getAbsolutePath);
}

  1. 在Activity.java文件中, 新建一个内部类,并继承AsyncTask<Void,Void,Bitmap>类,
    重写 doInBackground方法,重写 onPostExecute方法,具体如下:
package com.ilikelxystill.fuxi;

import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class InternetPictureActivity extends AppCompatActivity {
    private ImageView imageview;
    private SendUrlTask sendUrlTask;
    private int i=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_internet_picture);
        init_all();
        clickpituremax();
    }
    public void init_all(){
        imageview = (ImageView)findViewById(R.id.imgview);
        sendUrlTask = new SendUrlTask("http://img4.sycdn.imooc.com/5c7f636b000193f509600960-140-140.jpg");
        sendUrlTask.execute();
    }

    //点击图片方大
    public void clickpituremax(){
        imageview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (i==0){
                    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(300,
                            300);//两个400分别为添加图片的大小
                    imageview.setLayoutParams(params);
                    i=1;
                }else{
                    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                            ViewGroup.LayoutParams.WRAP_CONTENT);//两个400分别为添加图片的大小
                    imageview.setLayoutParams(params);
                    i=0;
                }
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (sendUrlTask!=null){
            sendUrlTask.cancel(true);
        }
    }

    private class SendUrlTask extends AsyncTask<Void,Void,Bitmap>{
        private String Url;

        public SendUrlTask(String c_url){
            Url = c_url;
        }

        @Override
        protected Bitmap doInBackground(Void... voids) {
            return httpurlPicture.loadPicture(Url);
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if(bitmap!=null) {
                imageview.setImageBitmap(bitmap);
            }
        }



    }
}

  1. xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".InternetPictureActivity">
    <ImageView
        android:id="@+id/imgview"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="250dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

运行后就可得到指定地址的图片,对于Bitmap的相关知识需要更细一步学习,今后开发会经常遇到,同时,有许多的优秀的网络开源框架,不需要写原生代码。学无止境,加油哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值