[解決済み] イメージビューのスケーリング TOP_CROP
質問
私は
ImageView
があり、デバイスのアスペクト比よりも大きな png を表示しています (垂直方向に長いということです)。アスペクト比を維持し、親の幅に合わせ、イメージビューを画面の上部に固定しながら、これを表示したいのです。
を使用する際の問題点は
CENTER_CROP
を使用した場合の問題は、画像ビューの上端に上端を揃えるのではなく、スケーリングされた画像を中央に配置することです(理解できる)。
の問題点は
FIT_START
の問題は、画像が画面の高さにフィットし、幅を埋めないことです。
私はこの問題を、カスタムのImageViewを使用して
onDraw(Canvas)
をオーバーライドし、canvas を使用して手動でこれを処理することで解決しました。このアプローチの問題は、1) もっと簡単なソリューションがあるのではないかと心配していること、2)
super(AttributeSet)
を呼び出したときに、ヒープに 3 mb の空き領域 (ヒープ サイズは 6 mb) があるのに、330kb の src img を設定しようとすると、VM メモリ例外が発生し、原因を突き止められません。
どんなアイデア/提案/解決策も大歓迎です :)
ありがとうございます。
p.s. 解決策として、マトリクススケールタイプを使用して自分で行うことも可能かと思いましたが、それは現在の解決策と同じかそれ以上の作業となるようです!
どのように解決するのですか?
OK、私は作業ソリューションを持っています。Darkoからのプロンプトは、私にImageViewクラスをもう一度見させました(感謝)、そして、マトリックスを使用して変換を適用しました(私が最初に疑ったように、しかし私の最初の試みで成功しませんでした!)。私のカスタムImageViewクラスで、私は以下を呼び出します。
setScaleType(ScaleType.MATRIX)
の後に
super()
をコンストラクタに追加し、以下のメソッドを用意します。
@Override
protected boolean setFrame(int l, int t, int r, int b)
{
Matrix matrix = getImageMatrix();
float scaleFactor = getWidth()/(float)getDrawable().getIntrinsicWidth();
matrix.setScale(scaleFactor, scaleFactor, 0, 0);
setImageMatrix(matrix);
return super.setFrame(l, t, r, b);
}
の中にintを置きました。
setFrame()
メソッドに配置しました。
configureBounds()
の呼び出しはこのメソッド内で行われ、そこではすべてのスケーリングとマトリックスが行われるので、私には論理的に見えます(反対なら言ってください)。
以下は
super.setFrame()
メソッドを AOSP (Android Open Source Project) から引用しています。
@Override
protected boolean setFrame(int l, int t, int r, int b) {
boolean changed = super.setFrame(l, t, r, b);
mHaveFrame = true;
configureBounds();
return changed;
}
フルクラスのsrcを見つける はこちら
関連
-
[解決済み] 角丸のImageViewを作るには?
-
[解決済み】ImageViewでアスペクト比を維持したまま画像を拡大縮小する方法
-
[解決済み] CENTER_INSIDEとFIT_CENTERのスケールタイプはどう違うのですか?
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Androidでマイナスマージンを使用するのは悪いことですか?
-
[解決済み] 「KotlinとAndroidで「パラメータTを推測するのに十分な情報がありません。
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] RecyclerViewのアイテムに波及効果を追加する
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
-
[解決済み] AndroidのimageviewがmaxWidthを無視する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Androidのソフトウェアキーボードが背景画像をリサイズする
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] FloatingActionButtonのサンプルとサポートライブラリ
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理