キャンバスにプログラムでSeekBar
を描画します。私はデバイス密度に基づいてSeekBar
のLayoutParamsを設定するコードを書いた。私はハイエンド端末でキャンバス問題に描画する
final DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
if(metrics.densityDpi <= DisplayMetrics.DENSITY_LOW){
zoomBarParams = new LinearLayout.LayoutParams(18,
LayoutParams.FILL_PARENT);
} else if (metrics.densityDpi <= DisplayMetrics.DENSITY_MEDIUM){
zoomBarParams = new LinearLayout.LayoutParams(24,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_HIGH){
zoomBarParams = new LinearLayout.LayoutParams(24,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_XHIGH){
zoomBarParams = new LinearLayout.LayoutParams(31,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_XXHIGH){
zoomBarParams = new LinearLayout.LayoutParams(60,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_XXXHIGH){
zoomBarParams = new LinearLayout.LayoutParams(60,
LayoutParams.FILL_PARENT);
} else {
zoomBarParams = new LinearLayout.LayoutParams(60,
LayoutParams.FILL_PARENT);
}
のようなデバイス密度とスイッチケースを使用しています。しかし、これはサムスンの注5のようなハイエンド機器で動作していない、ギャラクシーS6エッジetc..Iは、これらのデバイスは、その後、濃度範囲のXXXHIGHに来ることを信じていますなぜこれは動作していないのですか?キャンバスに描画する際のデバイスの密度と画面サイズとの間には何らかの関係がありますか?どんな助けでも大歓迎です。
私はあなたの問題は、 'densityDpiValue'が' DisplayMetrics'定数で指定された密度の1つと正確に等しくなることは保証されないと思います。密度が「321」に等しくなるとしましょう。どのケースもトリガーしません。範囲のチェックを検討してください。 –
もう一つの質問として、そのような 'switch'でどのような問題を解決しようとしていますか?代わりに 'dp'の値を使わないのはなぜですか? –
@DmitryZaitsevはい。範囲をチェックするようなコードを更新しました。この問題は、Samsung Note 5とGalaxy S6 Edgeで解決されました。しかし、問題はまだS6 Edge +に存在します。問題の私の更新されたコードを見てください。 – Jas