**
import android.app.Application;
import android.os.Environment;
import com.facebook.cache.disk.DiskCacheConfig;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
DiskCacheConfig images = DiskCacheConfig.newBuilder(this)
.setBaseDirectoryName("images")
.setBaseDirectoryPath(Environment.getExternalStorageDirectory())
.build();
ImagePipelineConfig build = ImagePipelineConfig.newBuilder(this)
.setMainDiskCacheConfig(images)
.build();
/*
//设置磁盘缓存
DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder(this)
.setBaseDirectoryName("images")
.setBaseDirectoryPath(Environment.getExternalStorageDirectory())
.build();
//设置磁盘缓存的配置,生成配置文件
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
.setMainDiskCacheConfig(diskCacheConfig)
.build();
Fresco.initialize(this, config); //不设置默认传一个参数既可 */
Fresco.initialize(this,build);
}
}**
**
import com.facebook.drawee.view.SimpleDraweeView;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/*@interface注解: 定义注解接口
@Target注解: 用于约束被描述的注解的使用范围,当被描述的注解超出使用范围则编译失败。如:ElementType.METHOD,ElementType.TYPE;
@Retention 注解:用于约束被定义注解的作用范围,作用范围有三个:
1,、RetentionPolicy.SOURCE:作用范围是源码,作用于Java文件中,当执行javac时去除该注解。
2、RetentionPolicy.CLASS:作用范围是二进制码,就是存在于class文件中,当执行Java时去除该注解。
3、RetentionPolicy.RUNTIME:作用范围为运行时,就是我们可以通过动态获取该注释。
@Documented:用于指定javadoc生成API文档时显示该注释。
@Inherited:用于指定被描述的注释可以被其描述的类的子类继承,默认情况是不能被其子类继承。*/
@Documented
@Retention(RetentionPolicy.RUNTIME)//运行时范围
@Target(ElementType.TYPE)
@Inherited
public @interface ZhuJie {
public String name() default "张三";
}**
**@ZhuJie(name = "Holle World")
public class User {
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}**
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.AbstractDraweeController;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.facebook.drawee.generic.RoundingParams;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import java.lang.reflect.Method;
import java.util.ArrayList;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
public class MainActivity extends AppCompatActivity {
/* Button yuanxing;
Button yuanjiao;
Button kuangao;
Button dongtu;
SimpleDraweeView simg;
Button zhijiezhi;
Button fanshe;*/
String dtu = "http://imgsa.baidu.com/exp/w=500/sign=6143fa124c34970a4773102fa5cbd1c0/38dbb6fd5266d016c0b4ac159a2bd40735fa3559.jpg";
String jtu = "http://img.zcool.cn/community/014565554b3814000001bf7232251d.jpg@1280w_1l_2o_100sh.png";
LinearLayout llFresco;
@BindView(R.id.yuanxing)
Button yuanxing;
@BindView(R.id.yuanjiao)
Button yuanjiao;
@BindView(R.id.kuangao)
Button kuangao;
@BindView(R.id.dongtu)
Button dongtu;
@BindView(R.id.simg)
SimpleDraweeView simg;
@BindView(R.id.zhijiezhi)
Button zhijiezhi;
@BindView(R.id.fanshe)
Button fanshe;
@BindView(R.id.ll_fresco)
LinearLayout ll_fresco;
LinearLayout lins;
SimpleDraweeView simpleDraweeView;
private Unbinder mBind;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBind = ButterKnife.bind(this);
// initView();
}
@OnClick(R.id.yuanxing)
public void yuanxing(){
Uri parse = Uri.parse(jtu);
RoundingParams roundingParams = RoundingParams.asCircle();
GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
GenericDraweeHierarchy build = builder.setRoundingParams(roundingParams).build();
simg.setHierarchy(build);
simg.setImageURI(parse);
}
@OnClick(R.id.yuanjiao)
public void yuanjia(){
Uri parse2 = Uri.parse(jtu);
RoundingParams roundingParams2 = RoundingParams.fromCornersRadius(20f);
GenericDraweeHierarchyBuilder builder2 = new GenericDraweeHierarchyBuilder(getResources());
GenericDraweeHierarchy build2 = builder2.setRoundingParams(roundingParams2).build();
simg.setHierarchy(build2);
simg.setImageURI(parse2);
}
@OnClick(R.id.kuangao)
public void kuangao(){
// 图片的地址
Uri uri = Uri.parse(jtu);
//创建控件
//创建Fresco加载图片的控件对象
simpleDraweeView = new SimpleDraweeView(this); // 设置控件对象的宽高比,必须设置,参数浮点型,大于1,则宽度是高度的几倍.
simpleDraweeView.setAspectRatio(0.5f);
//图片请求
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri).build();
//加载图片的控制
AbstractDraweeController build3 = Fresco.newDraweeControllerBuilder()
.setOldController(simpleDraweeView.getController())
.setImageRequest(request)
.build();
//加载图片
simpleDraweeView.setController(build3);
ll_fresco.addView(simpleDraweeView);
}
@OnClick(R.id.dongtu)
public void dongtu(){
Uri parse4 = Uri.parse(dtu);
DraweeController draweeController = Fresco.newDraweeControllerBuilder()
.setUri(parse4)
.setAutoPlayAnimations(true)
.build();
simg.setController(draweeController);
}
@OnClick(R.id.zhijiezhi)
public void zhijiezhi(){
Class<User> userClass = User.class;
//通过这个类得到要使用的注解
ZhuJie annotation = userClass.getAnnotation(ZhuJie.class);
String name = annotation.name();
try {
//实例化这个类,她实际上是使用了没有参数的构造函数,而且他会初始化这个对象如果这个还没有初始化过。(有些静态变量在类初始化的时候要进行初始化)
User user = userClass.newInstance();
user.setName(name);
Toast.makeText(this,user.getName(),Toast.LENGTH_SHORT).show();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@OnClick(R.id.fanshe)
public void fanshe(){
ArrayList<Integer> arl = new ArrayList<Integer>();
// 将上面定义的Arraylist 返回Arraylist的class对象
Class<? extends ArrayList> clazz = arl.getClass();
// 获取Arraylist 类里面的add方法
Method method = null;
try {
method = clazz.getMethod("add",Object.class);
// 对arl对象调用由 Method 对象表示的底层方法 ,向集合中添加字符串
method.invoke(arl, "这是一个字符串");
//method.invoke(arl, "这是两个字符串");
} catch (Exception e) {
e.printStackTrace();
}
//使用增强for来循环输出 集合中的数据
for (Object item : arl) {
Log.e("lyq",item+"");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mBind.unbind();
}
}
<?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:orientation="vertical"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/yuanxing"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="圆形图"/>
<Button
android:id="@+id/yuanjiao"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="圆角图:70DP"/>
<Button
android:id="@+id/kuangao"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="宽高比:1:2"/>
<Button
android:id="@+id/dongtu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加载动图"/>
</LinearLayout>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/simg"
android:layout_width="200dp"
android:layout_height="130dp"
android:layout_gravity="center"/>
<Button
android:id="@+id/zhijiezhi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="获取注解的值"/>
<Button
android:id="@+id/fanshe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="反射添加集合"/>
<LinearLayout
android:id="@+id/ll_fresco"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>