0

Twitter's ToolbarAndroidのナビゲーションアイコン - 代わりにハンバーガーアイコンのプロフィール画像

私はピカソやそのような何かをロードすることができるいくつかのカスタムイメージにナビゲーション引き出しを開くハンバーガーのアイコンを変更する方法を見つけようとしています。上記の画像のように、Twitterが自分のプロフィール画像を置き換えて、前に持っていたハンバーガーアイコンを置き換えたのです。

私はここにこのようなものを見つけることができなかったし、それを行う方法についての手掛かりはありません。

誰かがサンプルを入手したり、それを行う方法に関するガイダンスがあれば、本当に感謝しています。

私の活動のコードの一部

EDIT:

ActivityMapsBinding binding; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    binding = DataBindingUtil.setContentView(this, R.layout.activity_maps); 

    ... 

    setSupportActionBar(binding.mapsContent.toolbar); 
    getSupportActionBar().setTitle(""); 

    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, binding.drawerLayout, binding.mapsContent.toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    binding.drawerLayout.addDrawerListener(toggle); 

    toggle.syncState(); 

    binding.navView.setNavigationItemSelectedListener(this); 
} 


@Override 
public void onBackPressed() { 
    if (binding.drawerLayout.isDrawerOpen(GravityCompat.START)) { 
     binding.drawerLayout.closeDrawer(GravityCompat.START); 
    } else if (doubleBackToExitPressedOnce) { 
     super.onBackPressed(); 
     return; 
    } 

    this.doubleBackToExitPressedOnce = true; 
    Toast.makeText(this, R.string.message_press_twice, Toast.LENGTH_SHORT).show(); 

    new Handler().postDelayed(() -> doubleBackToExitPressedOnce = false, 2000); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    switch (item.getItemId()){ 
     case R.id.nav_profile: 
      break; 
     case R.id.nav_settings: 
      break; 
    } 

    binding.drawerLayout.closeDrawer(GravityCompat.START); 
    return true; 
} 

EDIT 2 - このスレッドでは、ここでブルーノ・ピントの助けと少し後ANSWER

を見つけました研究の私はついにそれを働かせました。 Targetを作成し、ImageViewのタグをこのTargetとして設定する必要があります.Picassoで読み込むと、作成したImageViewが参照されます。ターゲットのコンストラクタの内部では、読み込んだビットマップでビューを置き換えます。

は、ここで私はそれをやった方法は次のとおりです。

private void changeImageDrawable(){ 
    ImageView profileImage = (ImageView) binding.navView.getHeaderView(0).findViewById(R.id.iv_profile_image); 

    final Target target = new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
      profileImage.setImageBitmap(bitmap); 

      Drawable drawable = new BitmapDrawable(getResources(), bitmap); 
      binding.mapsContent.toolbar.setNavigationIcon(drawable); 
     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 

     } 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 

     } 
    }; 

    profileImage.setTag(target); 

    Picasso.with(this) 
      .load("YOUR_IMAGE_URL_HERE") 
      .placeholder(R.drawable.placeholder_profile) 
      .error(R.drawable.placeholder_profile) 
      .into(target); 
} 

は、おそらくあなたにもエラーが発生した場合に描画可能か、ビットマップビューに変更する必要があります。

+1

私は可能な方法を知っているが、私はここであなたアクティビティコードを投稿し、あなたのコードを参照する必要があります。 –

+0

レイアウトを作成し、それをActionBarとして使用することができます。だから、あなたが望むものを追加することができます。 –

+0

@BrunoFerreira私はいくつかのコードで私の質問を編集しました –

答えて

1

あなたはツールバーから.setNavigationIcon()メソッドを使用することができます。このような

何か:

((Toolbar) getSupportActionBar()).setNavigationIcon(YOUR_ICON);

+0

** YOUR_ICON **では、ピカソで読み込まれたカスタム画像を置くことができましたか? –

+0

はい。ドロウアブルからのIDでもドロウアブルからでも構いません。 –

+0

ありがとう!私は私の質問を編集しました。ターゲットとあなたの答えと一緒に私はそれを動作させました。 –

関連する問題