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"));
}
});
}
}