2013-08-02 86 views
1

我試圖創建一個自定義LinearLayout,它可以旋轉佈局中的所有孩子一個角度。也就是說,我想旋轉整個畫布孩子,而不是單獨的孩子。擴展LinearLayout不旋轉

我需要支持API Level 10,所以在API Level 11中引入的android:rotate在這裏不會幫助我。

我一直在四處尋找,並認爲我需要做沿着下面這段代碼線的東西,但是這個代碼沒有獲取旋轉。

關於我在這裏失蹤的任何想法?

public class RotationLayout extends LinearLayout {  

public RotationLayout(Context context) { 
    super(context); 
    init(); 
} 

public RotationLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
} 

public RotationLayout(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(); 
} 
private void init() { 
    setWillNotDraw(false); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.save(); 
    canvas.rotate(350,0,0); 
    super.onDraw(canvas); 
    canvas.restore(); 
} 
}` 
+0

要調用'canvas.restore()'?這不會撤銷canvas.rotate()做了什麼嗎? – Vikram

+0

覆蓋抽獎(Canvas)的替代的onDraw(Canvas)的 – pskink

+0

都嘗試你的建議,沒有運氣:-( – Daniel

回答

1

我試着用一些改變你的代碼。

在一個活動類的OnCreate(捆綁),I​​初始化RotationLayout:

RotationLayout rl = new RotationLayout(this); 

ImageView iv = new ImageView(this); 

iv.setImageDrawable(getResources().getDrawable(R.drawable.some_drawable)); 

rl.addView(iv); 

setContentView(rl); 

和視圖確實被旋轉350度(或10度逆時針)圍繞(0,0)。這是我改變了:

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.rotate(350,0,0); 
} 

從筆記上Canvas.save()(Link)

保存當前矩陣,夾在一個私人堆棧。隨後 調用平移,縮放,旋轉,傾斜,CONCAT或clipRect,clipPath將 一切照常,但在平衡通話恢復()是 發,這些電話會被人遺忘,而之前存在 的設置save()將被恢復。

+1

非常感謝你的時間維克拉姆,但這正是我需要的! – Daniel