2013-03-14 40 views
1

我想在自定義視圖中加載具有特定大小的位圖。作爲第一步,我想在400px x 400px的視圖中加載400px x 400px的位圖...但位圖加載的尺寸較小。自定義視圖位圖的大小不正確

我發現一些線程有類似的問題。有人建議使用Options.inScale = false。我用它,並得到了較好的日誌消息(位圖輸出正確的大小400像素X 400像素),但它仍然呈現小:

enter image description here

(黃色是自定義視圖的背景 - 400像素X 400像素,和紅色是位圖)。

任何建議?下面是代碼:

自定義視圖:

class TestView extends View { 
    private Bitmap bitmap; 
    private Paint paint = new Paint(); 

    public TestView(Context context) { 
     super(context); 
    } 

    public TestView(Context context, AttributeSet attr) { 
     super(context, attr); 

     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inScaled = false; 

     bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.overlay, options).copy(Config.ARGB_8888, true); 
     Log.d("test6", "width: " + bitmap.getWidth() + " height: " + bitmap.getHeight()); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawBitmap(bitmap, 0, 0, paint); 
    } 
} 

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#000000" 
    > 
    <com.example.TestView 
     android:id="@+id/view" 
     android:layout_width="400px" 
     android:layout_height="400px" 
     android:background="#ffff00" 
     /> 
</RelativeLayout> 

位圖已經是400像素X 400像素...這就是爲什麼我認爲我沒有使用縮放選項等我只是想在屏幕上顯示它與這個尺寸...

+0

爲什麼在構造函數中創建畫布?你正在繪製位圖到自己?這很奇怪,即使它不是bug,你可以刪除所有這些。 – 2013-03-14 13:31:08

+0

你是對的 - 這是一個更復雜的例子的一部分,我簡化了這篇文章......但部分代碼仍然存在。刪除它。 – Ixx 2013-03-14 13:32:49

+1

你有什麼文件夾中的位圖?非標定位圖應該是'drawable-nodpi'文件夾。否則,即使設置了該位,系統有時也會對其進行調整,無論文檔如何設置。 – DeeV 2013-03-14 14:16:05

回答

2

最有可能您的Bitmap不在drawable-nodpi文件夾,這就是爲什麼它得到縮放。

Canvas.drawBitmap文檔:

如果位圖和帆布具有不同的密度,此功能會照顧的自動縮放位圖在相同密度的帆布畫。

+0

+1第一次我需要這個時,我花了幾個小時的頭痛發現'inScaled = false'基本上沒用。 – Geobits 2013-03-14 14:46:50

+0

啊......這些文件夾再次!前一段時間,我有類似的問題,因爲他們,但完全忘了。謝謝! – Ixx 2013-03-14 14:55:35

相關問題