Material Design:如何为Android浮动操作按钮设置透明度

6

我的问题与这个有关。

当我打开导航抽屉时,浮动按钮在其顶部但必须在其下方。

我尝试这样做:

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            Log.i(TAG , " inner onDrawerSlide");
            super.onDrawerSlide(drawerView, slideOffset);
            fabButton.setAlpha(25);
            float alpha = 0.2f;
            AlphaAnimation alphaUp = new AlphaAnimation(alpha, alpha);
            alphaUp.setFillAfter(true);
            fabButton.startAnimation(alphaUp);
            syncState();
        }

并且就像这样:
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerClosed(view);
                invalidateOptionsMenu();
                fabButton.setAlpha(255);
                syncState();
            }

没什么方法对我有用。有什么解决方案吗?

我的布局:

<mobapply.freightexchange.customviews.FragmentNavigationDrawer
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:orientation="vertical">

    <!-- The ActionBar -->
    <include
        layout="@layout/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/flContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>
<!-- The navigation drawer -->
<ListView
    android:id="@+id/lvDrawer"
    android:layout_width="match_parent"
    android:divider="@null"
    android:dividerHeight="0dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:background="#FFFFFF"
    android:cacheColorHint="@android:color/transparent"
     />

FragmentNavigationDrawer是自定义的DrawerLayout

4个回答

5

根据Android的文档setAlpha(float alpha)(自API 11):

设置视图的不透明度。这是一个从0到1的值,其中0表示视图完全透明,1表示视图完全不透明。

您正在尝试将其设置为值25255 :)


是的,谢谢,那很有帮助。但问题仍然存在 - 即使我将0.1f设置为透明度,按钮仍显示在导航抽屉上方。必须找到更好的解决方案... - Rikki Tikki Tavi
所以问题在于您的 ButtonDrawerLayout 中的位置,而不是alpha本身。 - Bartek Lipinski
是的,你说得对 - 你知道如何以编程方式实现吗? - Rikki Tikki Tavi
请粘贴您的布局XML。 - Bartek Lipinski

0

这应该用一个漂亮的动画来隐藏它:

public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerSlide(drawerView, slideOffset);
                invalidateOptionsMenu();
                fabButton.setAlpha(1 - slideOffset);
                syncState();
            }

或者,您可以将其滑出视图:

public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerSlide(drawerView, slideOffset);
                invalidateOptionsMenu();
                fabButton.setTranslationX(slideOffset * 100);
                syncState();
            }

0
我用这行代码让它工作了,但设备方向的改变可能会有问题。
public void onDrawerSlide(View drawerView, float slideOffset) {
            super.onDrawerSlide(drawerView, slideOffset);

            fab.setAlpha(1-slideOffset);
        }

0
如果工厂的位置有问题,那么就让它可拖动。 以下是代码:
private FloatingActionButton fab;
float dX;
float dY;
int lastAction;


fab = (FloatingActionButton) findViewById(R.id.fab);

    fab.setOnTouchListener(this);





@Override
public boolean onTouch(View view, MotionEvent event) {
    switch (event.getActionMasked()) {
        case MotionEvent.ACTION_DOWN:
            dX = view.getX() - event.getRawX();
            dY = view.getY() - event.getRawY();
            lastAction = MotionEvent.ACTION_DOWN;
            break;

        case MotionEvent.ACTION_MOVE:
            view.setY(event.getRawY() + dY);
            view.setX(event.getRawX() + dX);
            lastAction = MotionEvent.ACTION_MOVE;
            break;

        case MotionEvent.ACTION_UP:
            if (lastAction == MotionEvent.ACTION_DOWN) {
                Intent intent = new Intent(Main.this, Cart.class);
                startActivity(intent);
                Toast.makeText(this, "Clicked!", Toast.LENGTH_SHORT).show();
            }
            break;

        default:
            return false;
    }
    return true;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接