在 FloatingActionButton (v21) 上获得圆形高程阴影
get rounded elevation-shadow on FloatingActionButton (v21)
我是 android 开发的新手,是的,在询问之前我已经尝试了很多来解决这个问题。
所以我正在尝试实现 FloatingActionButton(为简单起见,仅在 v21 上),但我无法使高度阴影变圆。
这是我已有的代码行:
在主要activity.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);
主要 activity .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>
我希望我没有忘记任何重要的代码部分,很抱歉这么长 post 但我很无助。如果有帮助,我也可以上传 AndroidStudio 项目文件。
来自德国的问候,感谢您的回答。 :)
你为什么不用图书馆?
在你里面加上这一行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
里面
如果您有任何问题,请在评论中提问:)
我是 android 开发的新手,是的,在询问之前我已经尝试了很多来解决这个问题。
所以我正在尝试实现 FloatingActionButton(为简单起见,仅在 v21 上),但我无法使高度阴影变圆。
这是我已有的代码行:
在主要activity.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);
主要 activity .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>
我希望我没有忘记任何重要的代码部分,很抱歉这么长 post 但我很无助。如果有帮助,我也可以上传 AndroidStudio 项目文件。
来自德国的问候,感谢您的回答。 :)
你为什么不用图书馆?
在你里面加上这一行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
如果您有任何问题,请在评论中提问:)