[英]Drag shadow is square for a round floating action button
我使用的是Android Lollipop(minSdk = 21),並且想要實現通過拖動手勢來移動Floating Action Button。 該按鈕是ImageButton的自定義子類,此處描述了代碼,因此我不再重復: 在樣式中為子類定義layout_width和layout_height屬性的默認值
對於拖動,我使用此處描述的方式: http : //developer.android.com/guide/topics/ui/drag-drop.html 。 這是我的代碼:
favoriteButton.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
v.startDrag(null, new View.DragShadowBuilder(v), null, 0);
return true;
}
});
findViewById(R.id.test_main_layout).setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_ENTERED:
favoriteButton.setVisibility(View.INVISIBLE);
break;
case DragEvent.ACTION_DROP:
favoriteButton.setX(event.getX() - favoriteButton.getWidth() / 2);
favoriteButton.setY(event.getY() - favoriteButton.getHeight() / 2);
favoriteButton.setVisibility(View.VISIBLE);
break;
}
return true;
}
});
通常,它可以工作,但問題是“拖動陰影”:它是正方形。 因此,它不尊重FAB的橢圓形輪廓。
如何使其行為正確?
我建議您實現自己的DragShadowBuilder
子類:僅重寫onDrawShadow()
並繪制一個FAB具有的大小的圓。 然后只需在startDrag()
使用該類。
如果FAB是ImageButton
,則可能已經有可用於陰影的圖像,因此您甚至不必畫圓。 您可以在onDrawShadow()
中將同一圖像簡單地繪制到Canvas
上。 這是如何從圖像構建陰影的示例: https : //gist.github.com/MarcinGil/5337109 。
@FD_謝謝您的回答。 同時,在嘗試發表評論時,我注意到用於FAB的背景可繪制對象不是橢圓形,而是一種簡單的顏色:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:attr/colorControlHighlight">
<item android:drawable="?android:attr/colorAccent"/>
</ripple>
將其更改為此:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:attr/colorControlHighlight">
<item android:drawable="@drawable/oval_accent_drawable"/>
</ripple>
另一個帶有所需顏色的橢圓形可繪制對象:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="?android:attr/colorAccent"/>
<size
android:width="@dimen/fab_size"
android:height="@dimen/fab_size"/>
</shape>
拖動陰影現在可以完美工作。
謝謝你成為我的橡皮鴨 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.