Android 5.0 部分新特性学习

本文介绍 Android 5.0 中的新特性,包括视图裁剪、Activity 过渡动画、波纹效果及圆形显示动画等。这些特性能够帮助开发者创建更美观且交互性更强的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

1.裁剪

这里写图片描述

<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过渡动画

这里写图片描述

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.波纹

这里写图片描述

<?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.圆形动画

这里写图片描述

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();
            }
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值