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>