2012-09-13 82 views
0

我有一個視圖,我需要垂直翻轉或鏡像。有很多關於鏡像單個位圖的信息,通過將其縮放-1並轉換爲offset,如here所述,但似乎沒有關於如何繪製View的所有內容的任何信息 - 具體而言,所有的子視圖 - 顛倒。Android:鏡像視圖

我在這個容器中有多個子視圖 - 文本,圖像 - 我希望有一種方法可以讓我將它們添加到單個視圖中,並將該視圖顛倒/側向繪製,而不是讓它們全部執行自定義繪製代碼以便將它們倒置並將容器重新定位。有任何想法嗎?

回答

2

您可以簡單地在Bitmap之外創建一個Canvas,然後調用您的根視圖的View.draw(Canvas)方法。這將爲您提供Bitmap中的視圖層次結構的快照。然後,您應用上述轉換來鏡像圖像。

+0

我相信使用它這樣,我還需要重新創建位圖上的任何改變,例如一鍵進入/離開被照亮的狀態? – Xono

+0

Xono,這是正確的。雖然如果你確切知道改變了什麼,那麼在一些數學的幫助下,你只需重新繪製包含改變的矩形。然而,這不是微不足道的。 – zienkikk

+0

聽起來像是過度使用這種情況,這隻會在接觸/下降時更新。但是,一個可能的問題是:由於該視圖包含按鈕,視圖上的輸入也必須進行調整?簡單地翻轉渲染的內容不會改變實際按鈕的位置,所以不會觸及視圖的錯誤部分? – Xono

1

傳輸視圖爲位圖,然後將其翻轉使用以下方法:

private static Bitmap getBitmapFromView(View view,int width,int height) { 
    int widthSpec = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY); 
    int heightSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY); 
    view.measure(widthSpec, heightSpec); 
    view.layout(0, 0, width, height); 
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    view.draw(canvas); 

    return bitmap; 
} 


private static Bitmap flipBitmap(Bitmap src) 
{ 
    Matrix matrix = new Matrix(); 
    matrix.preScale(-1, 1); 
    Bitmap dst = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, false); 
    dst.setDensity(DisplayMetrics.DENSITY_DEFAULT); 
    return dst; 
}