2013-07-26 75 views
3

如圖1所示,我已經在我的應用中調整了帶有圖標的導航抽屜,看起來沒問題。 我想在谷歌地圖的菜單右下角顯示圖標。抽屜底部右側圖標android

figure1 figure2

代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_map); 
    setupSlideMenu(); 
} 

private void setupSlideMenu() { 
    mPlanetTitles = getResources().getStringArray(R.array.planets_array); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout1); 
    addIcon(); 
    mDrawerList = (ListView) findViewById(R.id.left_drawer1); 

    // Set the adapter for the list view 
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mPlanetTitles)); 
    // Set the list's click listener 
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 
    log("setupSlideMenu", false); 
} 

private void addIcon() { 
    mDrawerToggle = new ActionBarDrawerToggle(
    this,     /* host Activity */ 
    mDrawerLayout,   /* DrawerLayout object */ 
    R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */ 
    R.string.drawer_open, /* "open drawer" description */ 
    R.string.drawer_close /* "close drawer" description */ 
    ) { 
     /** Called when a drawer has settled in a completely closed state. */ 
     public void onDrawerClosed(View view) { 
      getActionBar().setTitle(mTitle); 
     } 

     /** Called when a drawer has settled in a completely open state. */ 
     public void onDrawerOpened(View drawerView) { 
      getActionBar().setTitle(mDrawerTitle); 
     } 
    }; 
    // Set the drawer toggle as the DrawerListener 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 
} 
@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    // Sync the toggle state after onRestoreInstanceState has occurred. 
    mDrawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Pass the event to ActionBarDrawerToggle, if it returns true, then it has handled the app icon touch event 
    if (mDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    // Handle your other action bar items... 
    return super.onOptionsItemSelected(item); 
} 

任何想法? 在此先感謝!

回答

2

使用BottomDrawerToggle。 解決方案是非常簡單的:

  1. 新增ImageView到android.R.id.content的FrameLayout重力BOTTOM

  2. 製造ImageView一半可見的左/右頁邊距設置到一半的負值它的可繪製寬度。

  3. 解決內部資源action_bar_icon_vertical_padding,並用它作爲圖像視圖

    int id = Resources.getSystem().getIdentifier("action_bar_icon_vertical_padding", "dimen", "android"); 
    float padding = mActivity.getResources().getDimension(id); 
    
  4. SlidingDrawable創建的底部填充和計算如何動態地隱藏/縮小可繪製在抽屜滑動draw(Canvas canvas)方法。通過剪裁Rect以抽屜的可見像素量隱藏Drawable。

    public void draw(Canvas canvas) 
    { 
        float pixelsVisible = mOffset * mMinusShadow; 
        int target = (int) ((mWrapped.getIntrinsicWidth()/2)+pixelsVisible); 
        if(mGravity == GravityCompat.START || mGravity == Gravity.LEFT) 
         canvas.clipRect(target, 0, mWrapped.getIntrinsicWidth(), mWrapped.getIntrinsicHeight()); 
        else 
         canvas.clipRect(0, 0, mWrapped.getIntrinsicWidth() - target,mWrapped.getIntrinsicHeight());  
        this.mWrapped.draw(canvas); 
        canvas.restore(); 
    }