そのため、Imageview のサイズを動的に変更するのに問題があります。私は Spotify SDK を使用しています。アルバム アートの場合、一番下のシートのスクロール オフセットに従って画像のサイズを変更したいと考えています。
まず、リンクは1つしか投稿できないので、スクリーンショット付きのアルバムはこちら
したがって、左下の画像 (リンクの最初の画像) は、リンクの 2 番目の画像にサイズ変更する必要があります。これは、一番下のシート (フレーム レイアウト) の単純なイメージ ビューです。これが私のコードです。
mBottomSheetBehaviour.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
int state = newState == BottomSheetBehavior.STATE_EXPANDED ? View.VISIBLE : View.GONE;
mCloseSheetButton.setVisibility( state );
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// Animate fab
int width = bottomSheet.getWidth();
int translationX = (int) ((-width / 2f + mFAB.getWidth() / 2f + dpToPx(16) ) * slideOffset);
mFAB.setTranslationX(translationX);
float imgWidth = Math.max(getResources().getDimension(R.dimen.abc_action_bar_default_height_material), width * slideOffset);
Log.e("test", "onSlide: max " + imgWidth);
Log.e("test", "onSlide: img" + String.valueOf(mAlbumArt.getLayoutParams().height));
mAlbumArt.getLayoutParams().height = (int) (imgWidth);
mAlbumArt.getLayoutParams().width = (int) (imgWidth);
mAlbumArt.requestLayout();
// tried this, but does nothing: mAlbumArt.invalidate();
}
});
ログを見ると、サイズが変化していると言われていますが、画像は小さいままです (3 番目の画像)。最も奇妙なことは、再生/一時停止を押すと画像のサイズが変更されることです (一番下のシートが完全に拡張されているか、まったく拡張されていない場合のみ、スクロール時にそれを行うことはできません)。再生/一時停止は SDK によって処理され、私はこの関数のみを呼び出します。
private void updateButtons() {
boolean loggedIn = isLoggedIn();
mFAB.setImageResource(mYfitopsHelper.isPlaying() ? android.R.drawable.ic_media_pause : android.R.drawable.ic_media_play);
// Login button should be the inverse of the logged in state
Button loginButton = (Button) findViewById(R.id.login_button);
loginButton.setText(loggedIn ? R.string.logout_button_label : R.string.login_button_label);
// Set enabled for all widgets which depend on initialized state
for (int id : REQUIRES_INITIALIZED_STATE) {
findViewById(id).setEnabled(loggedIn);
}
// Same goes for the playing state
boolean playing = loggedIn && mYfitopsHelper.mCurrentPlayerState.trackUri != null;
for (int id : REQUIRES_PLAYING_STATE) {
findViewById(id).setEnabled(playing);
}
}
ボタンの1つが押されたときにのみImageviewが更新される理由がわかりません...何か提案はありますか?