我一直在开发具有复杂布局的应用程序。我最近意识到我需要使部分或全部布局可缩放。
我的一个主要 xml 文件具有线性布局,其中嵌套了多个布局以正确定位视图。有没有一种简单的方法可以使这种线性布局和其中的所有内容都可以缩放?还是让整个布局文件可缩放更容易?我有哪些选择?
我一直在开发具有复杂布局的应用程序。我最近意识到我需要使部分或全部布局可缩放。
我的一个主要 xml 文件具有线性布局,其中嵌套了多个布局以正确定位视图。有没有一种简单的方法可以使这种线性布局和其中的所有内容都可以缩放?还是让整个布局文件可缩放更容易?我有哪些选择?
首先使用该特定视图扩展该类
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());
您可能会看一下静态转换。ViewGroup
可以自定义任何或子类以将转换应用于其子视图。您可以通过调用启用此功能setStaticTransformationsEnabled(true)
,然后在您的自定义中覆盖getChildStaticTransformation()
回调(文档链接)ViewGroup
。您可以应用您喜欢的任何转换,包括创建缩放效果的比例。每当视图需要重绘或失效时,都会调用此回调。
此外,在将其与硬件加速一起使用时要小心。根据您需要更新转换的频率,您可能会发现硬件无法按预期重绘。如果是这样,您将需要为此视图层次结构启用软件层。