1.进行工具类的封装
1.1图片下载类的封装 主要是通过Rx_Android实现 (观察者模式)
package zm.ztd.com.rx_android.utils;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import rx.Observable;
import rx.Subscriber;
/**
* Created by Administrator on 2016-12-31.
*/
public class DownLoadUtils {
private OkHttpClient client;
public DownLoadUtils(){
client=new OkHttpClient();
}
/**
* 声明一个被观察者对象 作为结果返回
* @param path
* @return
*/
public Observable<byte[]>downLoadImage(String path){
return Observable.create(new Observable.OnSubscribe<byte[]>() {
@Override
public void call(Subscriber<? super byte[]> subscriber) {
if(!subscriber.isUnsubscribed()){
//访问网络操作
Request request=new Request.Builder().url(path).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
subscriber.onError(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
byte[] data=response.body().bytes();
if(data!=null){
subscriber.onNext(data);
}
}
}
});
}
}
});
}
}1.2 对图片进行压缩处理的工具类
package zm.ztd.com.rx_android.utils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
/**
* 对图片压缩的工具类
* Created by Administrator on 2016-12-31.
*/
public class ImageUtils {
public static Bitmap compreessIamge(Bitmap image){
ByteArrayOutputStream baos=new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,100,baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int options=100;
while (baos.toByteArray().length/1024>100){ //循环判断如果压缩后图片是否大于100kb,大于继续压缩
baos.reset();
options-=100;
//这里压缩options%,把压缩后的数据存放到baos中
image.compress(Bitmap.CompressFormat.JPEG,options,baos);
}
ByteArrayInputStream inputStream=new ByteArrayInputStream(baos.toByteArray());
Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
return bitmap;
}
}1.3 MainActivity中进行逻辑代码的实现
package zm.ztd.com.rx_android;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import zm.ztd.com.rx_android.utils.DownLoadUtils;
import zm.ztd.com.rx_android.utils.ImageUtils;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
private Button btnDownLoad;
private String path="http://p1.so.qhmsg.com/t0196896c77ff138dd6.jpg";
private DownLoadUtils downloadUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initEvent();
}
private void initEvent() {
btnDownLoad.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
downloadUtils.downLoadImage(path).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<byte[]>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(byte[] bytes) {
Bitmap source= BitmapFactory.decodeByteArray(bytes,0,bytes.length);
Bitmap bitmap= ImageUtils.compreessIamge(source);
imageView.setImageBitmap(bitmap);
if(source!=null){
source.recycle();
}
}
});
}
});
}
private void initView() {
imageView= (ImageView) findViewById(R.id.iv_img);
btnDownLoad= (Button) findViewById(R.id.btn_download);
downloadUtils=new DownLoadUtils();
}
}1.4网络权限一定要添加:<uses-permission android:name="android.permission.INTERNET"></uses-permission>
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦