2011-12-21 3 views
3

私はBitmapを持っています。私はそれを私のウィンドウのタイル張りの背景として使用しようとしています。問題はスケールが間違っていることです。私はビットマップを画面上に2倍の大きさに描画したい。私はBitmap.setDensityBitmapDrawable.setTargetDensityの両方を使用しようとしましたが、どちらも効果がありません。ビットマップを描画するときにsetDensity/setTargetDensityが無視される

マイコード:

Bitmap bitmap = fromSomewhere(); 
int original_density = bitmap.getDensity(); // this returns 240 
// bitmap.setDensity(..); // has no effect, tried with 120,160,480 
BitmapDrawable drawable = new BitmapDrawable(bitmap); 
// drawable.setTargetDensity(..); // has no effect, tried with 120,160,480 
drawable.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); 
getWindow().setBackgroundDrawable(drawable); 

注:

  • 私のターゲットSDKは8ですが、私はまた、具体的<supports-screens android:anyDensity="true"/>
  • マニフェスト
  • Bitmapオブジェクトが指定されている設定を試してみた、私が持っていますそれがどのように生成されるかを制御することはできません。私はそれを操作することしかできません。
  • 私のテストデバイスはSamsung Galaxy 2(高密度)ですが、中程度の密度のエミュレータでもテストしましたが、影響は見られませんでした。
  • 私は、は、GetWindowの特に1を他の密度を変更していない()

は密度がX2のスケーリングを達成するための最も簡単な方法はありませんか?どうしてうまくいかないのですか?\

+1

私はまだ解決策を知らないが、私は同じ問題を抱えていると私はあなたがタイルモードを設定すると濃度設定が無視されることに気づきました。 –

+0

タイルモードが設定されているときに濃度が無視されることに同意します。また、TileModeが設定されている場合、ImageViewのStretchMode.FIT_XYは無視されます。 – Moritz

答えて

0

これはAndroidのバグかデザインかわかりません。これに苦しんで、最終的に次の回避策で終わった。アイデアは、ピクセル密度を考慮に入れてマトリクス変換を適用してタイルを適用することです。 viewあなたImageViewのもの

view.setScaleType(ImageView.ScaleType.MATRIX); 

Matrix matrix = new Matrix(); 
float scaleFactor = view.getContext().getResources().getDisplayMetrics().density; 
matrix.setScale(scaleFactor,scaleFactor); 
view.setImageMatrix(matrix); 

BitmapDrawable bitmapDrawable = new BitmapDrawable(view.getContext().getResources(), bitmap); 
bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); 

view.setImageDrawable(bitmapDrawable); 
関連する問題