【问题标题】:Material Design : how to set transparency for Android Floating Action ButtonMaterial Design:如何为 Android Floating Action Button 设置透明度
【发布时间】:2015-06-26 21:26:44
【问题描述】:

我的问题与this 相关。

当我打开 NavigationDrawer 时,浮动按钮位于其顶部,但必须位于其下方。

我尝试这样做:

        @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

【问题讨论】:

    标签: android navigation-drawer material-design floating-action-button


    【解决方案1】:

    来自 Android documentation for setAlpha(float alpha)(自 API 11 起):

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

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

    【讨论】:

    • 是的,谢谢,这有帮助。但问题仍然存在 - 即使我将 0.1f 设置为透明度,但仍显示在导航抽屉上方。必须找到更好的解决方案...
    • 所以问题在于ButtonDrawerLayout 中的定位,而不是alpha 本身
    • 是的,你是对的 - 你知道如何以编程方式做到这一点吗?
    • 粘贴你的布局 xml
    【解决方案2】:

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

    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();
                }
    

    【讨论】:

      【解决方案3】:

      如果晶圆厂的位置有问题,则使其可拖动。 这是那个的代码

      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;
      }
      

      【讨论】:

        【解决方案4】:

        我可以使用这行代码,但它可能与设备方向的变化有关。

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

        【讨论】:

          猜你喜欢
          • 2020-10-02
          • 2016-01-04
          • 1970-01-01
          • 1970-01-01
          • 2022-01-20
          • 1970-01-01
          • 2015-10-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多