Fresco(展示图片)、EventBus(事件传递)

Fresco

简介

Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。其中的Drawees可以显示占位符,直到图片加载完成。而当图片从屏幕上消失时,会自动释放内存。

特性

1.内存管理

在5.0以下,GC将会显著地引发界面卡顿。Fresco将图片放到一个特别的内存区域,在图片不显示的时候,占用的内存会自动被释放,减少因图片内存占用而引发的OOM。(内存不够用)

2.图片的渐进式呈现

渐进式图片格式先呈现大致的图片轮廓,然后随着图片下载的继续,呈现逐渐清晰的图片,这对于移动设备,尤其是慢网络有极大的利好,可带来更好的用户体验。

3.Gif图和WebP格式

支持加载Gif图,支持WebP格式

4.图像的呈现(Fresco 的 Drawees 设计)

自定义居中焦点(对人脸等图片显示非常有帮助)
圆角图,当然圆圈也行。
下载失败之后,点击重现下载
自定义占位图,自定义overlay, 或者进度条
指定用户按压时的overlay(叠加)

5.图像的加载(Fresco 的 image pipeline 设计,允许用户在多方面控制图片的加载)

为同一个图片指定不同的远程路径,或者使用已经存在本地缓存中的图片
先显示一个低解析度的图片,等高清图下载完之后再显示高清图
加载完成回调通知
对于本地图,如有EXIF缩略图,在大图加载完成之前,可先显示缩略图
缩放或者旋转图片
处理已下载的图片
WebP支持

EventBus

作用

两个组件之间进行通信,但两个组件之间并不知晓,开销小,代码更优雅,将发送者和接收者解耦。(同Intent等)

使用

1.在接收消息界面注册
2.发送消息(eventbus.post()方法)
3.接收消息界面实现(四个)函数,可选择性实现不同函数的功能
4.接收消息界面解除注册

代码实现

MainActivity:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import de.greenrobot.event.EventBus;
import de.greenrobot.event.Subscribe;

public class MainActivity extends Activity {
    private Button mButton;
    private TextView mTextView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //注册EventBus
        EventBus.getDefault().register(this);
        mButton= (Button) findViewById(R.id.btn_main);
        mTextView= (TextView) findViewById(R.id.textview);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
                startActivity(intent);
            }
        });
    }
    @Subscribe
    public void onEventMainThread(EventMessage message){
        String msg="onEventMainThread收到了消息:"+message.getMessage();
        mTextView.setText(msg);
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);//解除注册
    }
}
SecondActivity:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.example.administrator.myimageloader.model.EventMessage;
import de.greenrobot.event.EventBus;

public class SecondActivity extends Activity {
    private Button mButtonSecond;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity);
        mButtonSecond= (Button) findViewById(R.id.btn_second);
        mButtonSecond.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventBus.getDefault().post(new EventMessage("click button second"));
            }
        });
    }
}

这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值