我一直在研究具有複雜佈局的應用程序。我最近意識到我需要使部分或全部佈局可縮放。將android佈局和嵌套佈局設置爲可縮放
我的一個主要xml文件有一個線性佈局,其中嵌套了多個佈局以適當地定位視圖。有沒有一種簡單的方法來使這種線性佈局和一切都在zoomable?或者讓整個佈局文件變得更加容易?我有什麼選擇?
我一直在研究具有複雜佈局的應用程序。我最近意識到我需要使部分或全部佈局可縮放。將android佈局和嵌套佈局設置爲可縮放
我的一個主要xml文件有一個線性佈局,其中嵌套了多個佈局以適當地定位視圖。有沒有一種簡單的方法來使這種線性佈局和一切都在zoomable?或者讓整個佈局文件變得更加容易?我有什麼選擇?
你可能會看看靜態轉換。可以定製任何ViewGroup
或子類,以將轉換應用於其子視圖。通過調用setStaticTransformationsEnabled(true)
,然後覆蓋自定義ViewGroup
中的getChildStaticTransformation()
回調(docs link)來啓用此功能。您可以應用您喜歡的任何轉換,包括縮放以創建縮放效果。這個回調將在任何時候視圖需要重繪或失效時被調用。
此外,請謹慎使用此硬件加速。根據您需要更新轉換的頻率,您可能會發現硬件不像您期望的那樣重新繪製。如果是這樣,您需要爲此視圖層次結構啓用軟件層。
首先延伸該類與該特定視圖
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());
[示例](http://stackoverflow.com/questions/4261527/resizing-scaling-down-android-widgets-datepicker-and-timepicker ) – Leonidos