Fresco 是一个强大的图片加载组件。使用它之后,你不需要再去关心图片的加载和显示这些繁琐的事情!它还有3级缓存。所有在图片加载的时候根本不需要担心出现OutOfMemoryError等异常出现。
1.添加配置:
(1).添加
compile 'com.facebook.fresco:fresco:1.4.0'
到build.gradle中
(2).添加 mavenCentral() 另一个build.gradle中 如:allprojects { repositories { jcenter() mavenCentral() } }(3).创建一个 BaseApplication 类集成Application 在它的onCreate()方法里初始化fresco 如:
public class Base1Application extends Application { private Context context; @Override public void onCreate() { super.onCreate(); context=getApplicationContext(); Fresco.initialize(context); } }(记得需要在配置文件中添加这个BaseApplication才行 如:<application android:name=".Util.BaseApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
)
2.使用fresco
在xml文件中的使用:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:id="@+id/activity_fresco" android:orientation="vertical" android:background="#dfd8d8" android:gravity="center_horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <!--SimpleDraweeView的在layout_width和layout_height里面都不可以用wrap_content--> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/image_1" /> <!--roundAsCircle 可以让图片为圆形 actualImageScaleType 设置图片的type --> <com.facebook.drawee.view.SimpleDraweeView android:layout_marginTop="20dp" android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/image_2" fresco:roundAsCircle="true" fresco:actualImageScaleType="focusCrop" /> <!--fresco:failureImage:配置的是下载成功之前显示的图片 failureImageScaleType:配置的是下载成功之前显示的图片的type 加载失败的时候显示的图片 fresco:failureImage="@drawable/error" fresco:failureImageScaleType="centerInside" 加载失败,提示用户点击重新加载的图片(会覆盖failureImage的图片) fresco:retryImage="@drawable/retrying" fresco:retryImageScaleType="centerCrop" --> <com.facebook.drawee.view.SimpleDraweeView android:layout_marginTop="20dp" android:layout_width="match_parent" android:layout_height="100dp" android:id="@+id/image_3" fresco:failureImage="@drawable/timg4" fresco:failureImageScaleType="centerInside" /> <LinearLayout android:background="#ffffff" android:layout_marginTop="20dp" android:gravity="center_horizontal" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="asd" android:id="@+id/fre_text" android:textSize="30sp" /> <Button android:layout_marginLeft="100dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="清楚缓存" android:textSize="20sp" android:id="@+id/fre_button" /> </LinearLayout> </LinearLayout>(对于frecos的SimpleDraweeView的主要API的使用已经在备注中写的很清楚的,还有更多的需要自行去百度查找了!)
在java文件中的使用:
public class FrescoActivity extends AppCompatActivity { private SimpleDraweeView mSdv1; private SimpleDraweeView mSdv2; private SimpleDraweeView mSdv3; private TextView mTextView; private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fresco); getSupportActionBar().hide(); mSdv1=(SimpleDraweeView)findViewById(R.id.image_1); mSdv2=(SimpleDraweeView)findViewById(R.id.image_2); mSdv3=(SimpleDraweeView)findViewById(R.id.image_3); mTextView=(TextView)findViewById(R.id.fre_text); mButton=(Button)findViewById(R.id.fre_button); String imageUrl="http://img5.imgtn.bdimg.com/it/u=3058668829,3584059364&fm=26&gp=0.jpg"; String imageUrl2="http://up.qqjia.com/z/face01/face06/facejunyong/junyong04.jpg"; String imageUrl3="http://img0.imgtn.bdimg.com/it/u=393316857,400369203&fm=26&gp=0.jpg"; mSdv1.setImageURI(Uri.parse(imageUrl)); mSdv2.setImageURI(Uri.parse(imageUrl2)); mSdv3.setImageURI(Uri.parse(imageUrl3)); //获取Fresco的缓存大小 long cacheSize = Fresco.getImagePipelineFactory().getMainFileCache().getSize(); long number=cacheSize/1048576; mTextView.setText(number+"M"); Log.i("jaing",cacheSize+""); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clearCache(); } }); } private void clearCache(){ ImagePipeline imagePipeline = Fresco.getImagePipeline(); //清空内存缓存(包括Bitmap缓存和未解码图片的缓存) imagePipeline.clearMemoryCaches(); //清空硬盘缓存,一般在设置界面供用户手动清理 imagePipeline.clearDiskCaches(); //同时清理内存缓存和硬盘缓存 imagePipeline.clearCaches(); long cacheSize =Fresco.getImagePipelineFactory().getMainFileCache().getSize(); long number=cacheSize/1048576; Log.i("jaing",cacheSize+""); mTextView.setText(number+"M"); } }(其中的使用是直接加载图片,所以需要添加<uses-permission android:name="android.permission.INTERNET" />访问网络这个权限,同时在上面的Button中的点击事件实现的缓存的清理。
)