我一直在研究具有复杂布局的应用。我最近意识到我需要制作部分或全部布局可缩放。
我的一个主要xml文件具有线性布局,其中嵌套了多个布局以正确定位视图。是否有一种简单的方法可以实现这种线性布局以及可缩放的所有内容?或者更容易使整个布局文件可缩放?我有什么选择?
答案 0 :(得分: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());
答案 1 :(得分:1)
您可能会看一下静态转换。可以自定义任何ViewGroup
或子类以将转换应用于其子视图。您可以通过调用setStaticTransformationsEnabled(true)
,然后覆盖自定义getChildStaticTransformation()
中的ViewGroup
回调(docs link)来启用此功能。您可以应用任何您喜欢的变换,包括缩放以创建缩放效果。只要视图需要重绘或无效,就会调用此回调。
另外,请注意在硬件加速时使用它。根据您需要更新转换的频率,您可能会发现硬件不能像您期望的那样重绘。如果是这样,您将需要为此视图层次结构启用软件层。