5

La mia domanda è relativa a this una.Material Design: come impostare la trasparenza per il pulsante di azione mobile Android

Quando apro NavigationDrawer, il pulsante mobile si trova sulla parte superiore ma deve essere inferiore.

cerco di farlo in quel modo:

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

e così:

  @Override 
      public void onDrawerSlide(View drawerView, float slideOffset) { 
       super.onDrawerClosed(view); 
       invalidateOptionsMenu(); 
       fabButton.setAlpha(255); 
       syncState(); 
      } 

Niente ha funzionato per me. Quale può essere la soluzione?

mio layout:

<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 è l'usanza DrawerLayout

risposta

4

Dal Android documentation for setAlpha(float alpha) (dal API 11):

Imposta l'opacità della vista. Questo è un valore da 0 a 1, dove 0 significa che la vista è completamente trasparente e 1 significa che la vista è completamente opaca.

Stai cercando di impostarla al valore 25 o 255 :)

+0

Sì, grazie, questo mi ha aiutato. Ma il problema rimane - anche quando ho impostato 0.1f per la trasparenza, ma mostra SOPRA il cassetto di navigazione. Devi trovare una soluzione migliore ... –

+0

quindi il problema è con il posizionamento del tuo 'Button' all'interno del tuo' DrawerLayout', non con l'alfa stesso –

+0

sì, hai ragione - sai come farlo programmaticamente? –

0

Questo dovrebbe nasconderlo con una simpatica animazione:

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

Oppure, si potrebbe scivolare fuori di vista:

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

se la posizione del fab è un problema, quindi renderlo trascinabile. qui è il codice per quel

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

ho ottenuto che funziona con questa linea di codice, ma può avere un problema con il cambiamento di orientamento del dispositivo.

public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, slideOffset); 

      fab.setAlpha(1-slideOffset); 
     } 
Problemi correlati