2013-01-15 161 views
10

我一直在研究具有複雜佈局的應用程序。我最近意識到我需要使部分或全部佈局可縮放。將android佈局和嵌套佈局設置爲可縮放

我的一個主要xml文件有一個線性佈局,其中嵌套了多個佈局以適當地定位視圖。有沒有一種簡單的方法來使這種線性佈局和一切都在zoomable?或者讓整個佈局文件變得更加容易?我有什麼選擇?

回答

1

你可能會看看靜態轉換。可以定製任何ViewGroup或子類,以將轉換應用於其子視圖。通過調用setStaticTransformationsEnabled(true),然後覆蓋自定義ViewGroup中的getChildStaticTransformation()回調(docs link)來啓用此功能。您可以應用您喜歡的任何轉換,包括縮放以創建縮放效果。這個回調將在任何時候視圖需要重繪或失效時被調用。

此外,請謹慎使用此硬件加速。根據您需要更新轉換的頻率,您可能會發現硬件不像您期望的那樣重新繪製。如果是這樣,您需要爲此視圖層次結構啓用軟件層。

+0

[示例](http://stackoverflow.com/questions/4261527/resizing-scaling-down-android-widgets-datepicker-and-timepicker ) – Leonidos

4

首先延伸該類與該特定視圖

public class MyImageView extends ImageView{ 

覆蓋下面的方法。

@Override 
protected void onDraw(Canvas canvas) { 
super.onDraw(canvas); 
canvas.save(); 

canvas.scale(mScaleFactor, mScaleFactor, midPoint.x, midPoint.y); 
if(appInitialized) { 

hsSide.draw(canvas); 
scaleA.draw(canvas); 
scaleB.draw(canvas); 

    } 

canvas.restore(); 


} 

創建手勢檢測器將檢測縮放對象的大小,並且可以限制以避免重疊。

 private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { 

@Override 
public boolean onScale(ScaleGestureDetector detector) { 

    mScaleFactor *= detector.getScaleFactor(); 
    pivotX = detector.getFocusX(); 
    pivotY = detector.getFocusY(); 
    // Don't let the object get too small or too large. 
    mScaleFactor = Math.max(0.8f, Math.min(mScaleFactor, 2.0f)); 

    invalidate(); 
    return true; 
    } 
} 

在結束初始化對象

ScaleGestureDetector mScaleDetector; 



    mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); 
+0

謝謝我會試一試! – Peter

+0

這個工作如果我試圖做到這一點的根佈局不是一個imageview它是一個佈局,其中包含其他視圖和佈局 – Peter

+0

您可以擴展任何視圖類的規模gestrue會檢測視圖的大小並且你可以限制它相應地重疊另一個視圖 – Jan