Android5.0新特性

1.Activity转场动画

   首先,把之前启动Activity的代码改成下面的写法:

(如果低版本需要加注解@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

1 startActivity(new Intent(this, TestActivity.class), ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

在TestActivity中设置该Activity的进出场动画即可:

getWindow().setEnterTransition(new Explode().setDuration(2000));  
getWindow().setExitTransition(new Explode().setDuration(2000)); 

在styles.xml文件中添加下面一行代码,表示激活Activity中元素的过渡效果:

<item name="android:windowContentTransitions">true</item>  

其他:滑动进入

    getWindow().setEnterTransition(new Slide().setDuration(2000));  
    getWindow().setExitTransition(new Slide().setDuration(2000));  

其他:淡入淡出

getWindow().setEnterTransition(new Fade().setDuration(2000));  
getWindow().setExitTransition(new Fade().setDuration(2000)); 

2.共享元素

1.view元素设置

view.setTransitionName( getString(R.string.transition_name)); 

2.相同元素设置都要添加xml

android:transitionName=”@string/transition_name”

3.代码中调用

Intent intent=new Intent(MainActivity.this, TestActivity.class);
ActivityOptions options = ActivityOptions .makeSceneTransitionAnimation(MainActivity.this, view, view.getTransitionName()); startActivityForResult(intent, 1, options.toBundle());

3.水波纹效果

在xml的background中设置即可

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#FF21272B">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF" />
            <corners android:radius="4dp" />
        </shape>
    </item>
    <item android:drawable="@drawable/rounded_corners" />
</ripple>

4.Circular Reveal

当您显示或隐藏一组 UI 元素时,揭露动画可为用户提供视觉连续性。ViewAnimationUtils.createCircularReveal()
方法让您能够为裁剪区域添加动画以揭露或隐藏视图。

 // 先设置点击事件,然后直接在onClick中进行动画操作
    @Override
    public void onClick(View v) {
        // 获取FloatingActionButton的中心点的坐标
        int centerX = (v.getLeft() + v.getRight()) / 2;
        int centerY = (v.getTop() + v.getBottom()) / 2;
        // Math.hypot(x,y):  返回sqrt(x2 +y2)
        // 获取扩散的半径
        float finalRadius = (float) Math.hypot((double) centerX, (double) centerY);
        // 定义揭露动画
        Animator mCircularReveal = ViewAnimationUtils.createCircularReveal(
                secondView, centerX, centerY, 0, finalRadius);
        // 设置动画持续时间,并开始动画
        mCircularReveal.setDuration(4000).start();
    }

5.悬挂式notification

/**
     * 悬挂式notification
     */
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    private void openNotification() {
        Notification.Builder builder = new Notification.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setPriority(Notification.PRIORITY_DEFAULT)
                .setCategory(Notification.CATEGORY_MESSAGE)
                .setContentTitle("悬挂 Notification")
                .setContentText("一个悬挂notification.")
                .setSubText(" Notification on Android 5.0");

        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setClass(this, TestActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

        //通过setFullScreenIntent将一个Notification变成悬挂式Notification
        builder.setFullScreenIntent(pendingIntent, true);

        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        nm.notify(0, builder.build());
    }

 6.palette的使用

    Palette 可以从一张图片中提取颜色,我们可以把提取的颜色融入到App UI中,可以使UI风格更加美观融洽。比如,我们可以从图片中提取颜色设置给ActionBar做背景颜色,这样ActionBar的颜色就会随着显示图片的变化而变化。

我们要想使用Palette,需要导入Palette的兼容库,Gradle 中添加下面依赖。

compile 'com.android.support:palette-v7:21.0.0'
 1 private void paletteTest(){
 2         // 此方法可能会阻塞主线程,建议使用异步方法
 3         //Palette palette = Palette.generate(bitmap);
 4 
 5         Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.bg);
 6         // 异步提取Bitmap颜色
 7         Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
 8             @Override
 9             public void onGenerated(Palette palette) {
10                 // 提取完毕
11                 // 有活力的颜色
12                 Palette.Swatch vibrant = palette.getVibrantSwatch();
13                 // 有活力的暗色
14                 Palette.Swatch darkVibrant = palette.getDarkVibrantSwatch();
15                 // 有活力的亮色
16                 Palette.Swatch lightVibrant = palette.getLightVibrantSwatch();
17                 // 柔和的颜色
18                 Palette.Swatch muted = palette.getMutedSwatch();
19                 // 柔和的暗色
20                 Palette.Swatch darkMuted = palette.getDarkMutedSwatch();
21                 // 柔和的亮色
22                 Palette.Swatch lightMuted = palette.getLightMutedSwatch();
23 
24                 // 使用颜色
25                 // 修改Actionbar背景颜色
26                 getActionBar().setBackgroundDrawable(new ColorDrawable(vibrant.getRgb()));
27                 // 修改文字的颜色
28                 button6.setTextColor(muted.getTitleTextColor());
29                 // 根据需求选择不同效果的颜色应用
30             }
31         });
32     }

7.阴影效果

 android:elevation 设置该组件“浮”起来的高度,to难过过设置该属性可以让该组件呈现3D效果。

 android:translationZ  设置该组件在Z方向(垂直屏幕方向)上的位移。

对应的Java方法:setElevation(float)  setTranslationZ(float)

<TextView
        android:id="@+id/button6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="测试"
        android:elevation="10dp"
        android:translationZ="10dp"
        android:textSize="18sp"/>

8.tint着色器

作用1:一张矢量图适配所有颜色
作用2:更优雅的selector实现方式

xml方式:

 <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image"
        android:src="@mipmap/icon"
        android:clickable="true"
        />
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image2"
        android:src="@mipmap/icon"
        android:tint="#FFCDD2"
        android:clickable="true"
        />

Java代码

 Drawable drawable = ContextCompat.getDrawable(this,R.mipmap.icon);
        Drawable.ConstantState state = drawable.getConstantState();
        Drawable drawable1 = DrawableCompat.wrap(state == null ? drawable : state.newDrawable()).mutate();
        drawable1.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        DrawableCompat.setTint(drawable,ContextCompat.getColor(this,R.color.pink));
        imageView.setImageDrawable(drawable);
        imageView1.setImageDrawable(drawable1);

9.clipping裁剪

            v1 = findViewById(R.id.tv_1);  
            v2 = findViewById(R.id.tv_2);  
            ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {  
                @Override  
                public void getOutline(View view, Outline outline) {  
      
                    outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 10);  
                }  
            };  
            ViewOutlineProvider viewOutlineProvider1 = new ViewOutlineProvider() {  
                @Override  
                public void getOutline(View view, Outline outline) {  
      
                    outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), view.getHeight() / 2);  
                }  
            };  
            v1.setOutlineProvider(viewOutlineProvider);  
            v2.setOutlineProvider(viewOutlineProvider1);  

10.CardView卡片式控件

首先在build.gradle文件添加依赖库

基本属性:
app:cardBackgroundColor这是设置背景颜色
app:cardCornerRadius这是设置圆角大小
app:cardElevation这是设置z轴的阴影
app:cardMaxElevation这是设置z轴的最大高度值
app:cardUseCompatPadding是否使用CompatPadding
app:cardPreventCornerOverlap是否使用PreventCornerOverlap
app:contentPadding 设置内容的padding
app:contentPaddingLeft 设置内容的左padding
app:contentPaddingTop 设置内容的上padding
app:contentPaddingRight 设置内容的右padding
app:contentPaddingBottom 设置内容的底padding

 compile 'com.android.support:cardview-v7:24.2.0'

布局文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:background="@color/gray">

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        app:cardBackgroundColor="@color/blue"
        app:cardCornerRadius="16dp"
        app:cardElevation="16dp">

        <TextView
            android:id="@+id/id_num"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="10dp"
            android:gravity="center"
            android:textColor="@color/white"
            android:textSize="20sp" />
    </android.support.v7.widget.CardView>
</FrameLayout>

 

posted @ 2017-03-22 16:20  点滴之水  阅读(792)  评论(0编辑  收藏  举报