• 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>
  • 相关阅读:
    jQuery的简单实用的25个知识点
    toDoList案例
    缓动动画函数的封装
    轮播图的设置:
    Django学习:cookie和session
    Django学习:ORM
    Django学习:中间件
    Django学习:url路由系统
    Django学习:模板继承和配置静态文件
    Django学习:模板语法
  • 原文地址:https://www.cnblogs.com/yoyohong/p/6599096.html
Copyright © 2020-2023  润新知