簡體   English   中英

拖動陰影是方形的,用於圓形浮動操作按鈕

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM