在FloatingActionButton上获得舍入的高程阴影(v21)

时间:2015-02-14 10:12:49

标签: java android android-elevation

我对Android开发很新,是的,我在尝试之前已经尝试了很多来解决这个问题。

所以我试图实现FloatingActionButton(为了简单起见,仅在v21上),我只是无法将高程阴影舍入。

以下是我已经使用的代码行:

在主要活动.java(命名概述)中:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_overview);
        ImageButton fabbutton = (ImageButton) findViewById(R.id.fab);

        ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {
        @Override
        public void getOutline(View view, Outline outline) {
            int size = getResources().getDimensionPixelSize(R.dimen.round_button_diameter);
            outline.setOval(0, 0, size, size);
        }
};
fabbutton.setOutlineProvider(viewOutlineProvider);

主要活动.xml:

    <ImageButton
    android:id="@+id/fab"
    android:layout_width="@dimen/round_button_diameter"
    android:layout_height="@dimen/round_button_diameter"
    android:layout_gravity="end|bottom"
    android:background="@drawable/oval_ripple"
    android:src="@android:drawable/ic_input_add"
    android:tint="@android:color/white"
    android:elevation="@dimen/elevation_low"
    android:stateListAnimator="@anim/button_elevation"
    android:layout_alignBottom="@+id/expandableListView"
    android:layout_alignEnd="@+id/expandableListView"
    android:layout_marginRight="@dimen/add_button_margin"
    android:layout_marginBottom="@dimen/add_button_margin"
    android:contentDescription="@string/fab"
    android:cropToPadding="false" />

dimens.xml

<dimen name="round_button_diameter">56dp</dimen>
<dimen name="add_button_margin">16dp</dimen>
<dimen name="elevation_low">8dp</dimen>
<dimen name="elevation_high">14dp</dimen>

oval_ripple.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight">
<item>
    <shape android:shape="oval">
        <solid android:color="#fff1d744"/>
    </shape>
</item>

button_elevation.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
    <objectAnimator
        android:propertyName="translationZ"
        android:duration="@android:integer/config_shortAnimTime"
        android:valueFrom="8dp"
        android:valueTo="14dp"
        android:valueType="floatType"/>
</item>
<item>
    <objectAnimator
        android:propertyName="translationZ"
        android:duration="@android:integer/config_shortAnimTime"
        android:valueFrom="14dp"
        android:valueTo="8dp"
        android:valueType="floatType"/>
</item>

我希望我没有忘记任何重要的代码部分而且对于长篇文章感到抱歉但是我很无奈。如果它有帮助我也可以上传AndroidStudio项目文件。

来自德国的问候和感谢答案。 :)

1 个答案:

答案 0 :(得分:0)

你为什么不使用图书馆?

build.gradle

中添加此行
dependencies {
     ...
     compile 'com.getbase:floatingactionbutton:1.3.0'
     ...
}

并在你的布局xml文件中使用:

<com.getbase.floatingactionbutton.FloatingActionButton
    android:id="@+id/common_ring_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_marginBottom="10dp"
    android:layout_marginEnd="10dp"
    android:layout_marginRight="10dp"
    fab:fab_colorNormal="#FF2222"
    fab:fab_colorPressed="#FF0000"
    fab:fab_icon="android:drawable/ic_input_add"/>

但是你记得你必须将FloatingButton置于RelativeLayout

之内

如果您有任何问题,请在评论中提问:)