我一直在开发一个复杂布局的应用程序。最近我意识到我需要使部分或全部布局具有可缩放性。
我的一个主要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)
并覆盖您的自定义ViewGroup
中的getChildStaticTransformation()
回调(docs link),您可以启用此功能。您可以应用任何您喜欢的转换,包括缩放以创建缩放效果。每次需要重新绘制或无效时,都会调用此回调。
此外,在使用硬件加速时要小心。根据您需要更新转换的频率,您可能会发现硬件无法按照您的预期重新绘制。如果是这样,您需要为此视图层次结构启用软件层。