2013-02-23 52 views
6

問題&問:可繪製在視圖得到壓扁

我現在有一個觀點傳呼機,裏面坐了只有2頁/意見,這是彼此相鄰的水平。

我的意見是其中繪製一個雙色漸變並在它在低不透明度/α值頂部的圖像的自定義的。

我發現,當我在屏幕上滑動來從第一視圖/頁移動到第二或反之亦然,圖像越來越壓扁。 如何防止發生這種情況,並正常繪製它們?

實施例:

圖像顯示,是可見的第一視圖,預刷卡;所述圖像示出了兩個視圖,中途滑動

Normal viewSquashed views, as I'm mid-way through swiping

代碼:

我有一個Drawable可變我先前設置,overlayImage,我沒有比設置不透明度做什麼其他的。

@Override 
protected void onDraw(Canvas canvas) { 
    p.setShader(new LinearGradient(0, 0, 0, getHeight(), startColor, endColor, Shader.TileMode.MIRROR)); 
    canvas.drawPaint(p); 

    //Pretty sure the mistake is around these two next lines 
    overlayImage.setBounds(canvas.getClipBounds()); 
    overlayImage.draw(canvas); 
} 
+0

你的overlayImage是什麼類型的Drawable?這個onDraw是你的自定義視圖的一部分? – Matthieu 2013-02-26 22:07:16

+0

「overlayImage」實際上只是一個普通的,普通的Drawable;是的,這個onDraw是我自定義視圖的一部分。 – 2013-02-26 22:50:13

回答

2

其實,我覺得它是在你

overlayImage.setBounds(canvas.getClipBounds()); 

行代碼。當所得到的最左邊的(刷在右最)視圖的剪輯範圍,它是獲得可視區域(即更小的收縮區域)的大小,從而圖像被吸入到該縮小的空間。

你可能想通過它正在overlayn上,而不是裁剪範圍視圖的整體尺寸設定界限。使用getHeight()和getWidth()畫布並建立自己的邊界。

其實我覺得你真的應該設置位於overlayImage邊界只有一次的設置代碼。繪圖代碼不一定需要設置它,然後當視圖開始離開屏幕時,overlayImage的繪圖自然會隨繪圖畫布的其餘部分一起移動。

0

我認爲你需要做一個xmldrawable-hdpi文件夾中。 其中將包含您的shader/linear gradiant。(對選擇看here

<?xml version="1.0" encoding="utf-8"?> 

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <gradient 
     android:startColor="#474946" 
     android:endColor="#181818" 
     android:angle="270"/> 
</shape> 

然後就可以設置xml爲背景..這應該可以解決,我認爲這個問題。

(如果它不工作,嘗試沒有android:shape="rectangle",這可能有助於)