Elevation + TranslationZ

这2个概念是AAndroid5.0(API=21)才引入的,都是代表控件浮起来的高度

google Android Sample: https://developer.android.google.cn/samples/ElevationBasic/index.html
Demo: http://git.oschina.net/Android5x/Elevation01

这里写图片描述 这里写图片描述

Elevation 和 TranslationZ的区别

参考:elevation 和 translationZ的区别
Z轴阴影: Z = elevation + translationZ
elevation 是静态值,是View在Z轴上的初始值
translationZ是动态值,是Z上的偏移变化

视图的 Z 值包含两个组件

  • 高度:静态组件。
  • 转换:用于动画的动态组件。

    Z = elevation + translationZ
    

android:elevation:API>=21

android:elevation="50dp"

app:cardElevation:没有限制

app:cardElevation="50dp"

在xml中都可以设置

android:elevation="30dp"
android:translationZ="30dp"

在java中也有对应的设置方法

setElevation(100)
setTranslationZ(50)

Demo

<View
    android:id="@+id/view_blue"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:layout_centerInParent="true"
    android:background="@drawable/shape"
    android:elevation="10dp"/>

<View
    android:id="@+id/view_red"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:layout_centerVertical="true"
    android:layout_marginStart="180dp"
    android:background="@color/colorAccent"/>

点击按钮后,提高控件Z轴的高度,再次点击Z轴的值变到初始值。

//点击后让红色按钮移到上方
view_red.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Log.d(TAG, "点击了红色按钮");
        if (flag) {
            view.setTranslationZ(0);//Api>=21
            flag = false;
        } else {
            view.setTranslationZ(20);//Api>=21
            flag = true;
        }
    }
});

按下按钮的时候,提高控件在Z轴的高度;松开后Z轴的值变到初始值

//返回false表示不处理触摸事件,那么点击事件setOnClickListener(...)才有效
view_red.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch (motionEvent.getAction()) {
            case MotionEvent.ACTION_DOWN:
                view_red.setElevation(100);
//                        view_red.setTranslationZ(50);
                break;
            case MotionEvent.ACTION_UP:
                view_red.setElevation(0);
//                        view_red.setTranslationZ(0);
                break;
        }
        return false;
    }
});
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐