首先要说明,这是5.0的新特性,运行在版本比较低的系统上会无法促互现预期效果甚至崩溃的情况。

1.裁剪

Android 5.0 部分新特性学习_bundle

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/textview1"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#ff0000"
/>
<TextView
android:id="@+id/textview2"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="20dp"
android:background="#00ff00"
/>
</LinearLayout>
public class MainActivity extends AppCompatActivity {

@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View viewById = findViewById(R.id.textview1);
View viewById1 = findViewById(R.id.textview2);
ViewOutlineProvider provider1 = new ViewOutlineProvider(){
@Override
public void getOutline(View view, Outline outline) {
outline.setRoundRect(0,0,view.getWidth(),view.getHeight(),50);
}
};
ViewOutlineProvider provider2 = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setOval(0,0,view.getWidth(),view.getHeight());
}
};
viewById.setClipToOutline(true);//必须设置,否则不起作用
viewById1.setClipToOutline(true);
viewById.setOutlineProvider(provider1);
viewById1.setOutlineProvider(provider2);
}

}

2.Activity过渡动画

Android 5.0 部分新特性学习_ide_02

public class MainActivity extends AppCompatActivity {
private Intent intent;
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void explode(View view){
intent = new Intent(this, SecondActivity.class);
intent.putExtra("flag",0);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void slide(View view){
intent = new Intent(this, SecondActivity.class);
intent.putExtra("flag",1);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void fade(View view){
intent = new Intent(this, SecondActivity.class);
intent.putExtra("flag",2);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void share(View view){
View shareView = findViewById(R.id.iv_share2);
View launcher = findViewById(R.id.iv_share);
intent = new Intent(this,SecondActivity.class);
intent.putExtra("flag",3);
//单个元素共享
// startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this,shareView,"shareView").toBundle());
startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(launcher,"launcher")
,Pair.create(shareView,"ym")).toBundle());
}
}
public class SecondActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
int flag = getIntent().getExtras().getInt("flag");
switch (flag){
case 0:
getWindow().setEnterTransition(new Explode());
break;
case 1:
getWindow().setEnterTransition(new Slide());
break;
case 2:
getWindow().setEnterTransition(new Fade());
getWindow().setExitTransition(new Fade());
break;
case 3:
break;
}
setContentView(R.layout.activity_second);
ImageView imageView = (ImageView) findViewById(R.id.iv2);
ImageView imageView2 = (ImageView) findViewById(R.id.iv3);
ViewCompat.setTransitionName(imageView, "ym");
ViewCompat.setTransitionName(imageView2, "launcher");
}
}

3.波纹

Android 5.0 部分新特性学习_ide_03

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
>
<Button
android:layout_width="100dp"
android:layout_height="100dp"
android:text="有界波纹"
android:background="@drawable/ripple"
/>
<Button
android:layout_width="100dp"
android:layout_height="100dp"
android:text="无界波纹"
android:background="?android:attr/selectableItemBackgroundBorderless"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@android:color/holo_blue_light"
>
<item>
<shape
android:shape="oval"
>
<solid android:color="@color/colorAccent"/>

</shape>
</item>
</ripple>

4.圆形动画

Android 5.0 部分新特性学习_android_04

public class MainActivity extends AppCompatActivity {
private Intent intent;

@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView circle = (ImageView) findViewById(R.id.iv1);
final ImageView rect = (ImageView) findViewById(R.id.iv2);
circle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Animator animator = ViewAnimationUtils.createCircularReveal(circle,circle.getWidth()/2,
circle.getHeight()/2,0,circle.getWidth());
animator.setDuration(3000);
animator.setInterpolator(new DecelerateInterpolator());
animator.start();
}
});
rect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Animator circularReveal = ViewAnimationUtils.createCircularReveal(rect, rect.getWidth()/2,rect.getHeight()/2, 0, rect.getHeight());
circularReveal.setDuration(2000);
circularReveal.start();
}
});
}
}