制作可缩放的 Android 布局及嵌套布局

10

我一直在开发一个复杂布局的应用程序。最近我意识到我需要使部分或全部布局具有可缩放性。

我的一个主要XML文件有一个线性布局,其中包含多个嵌套布局以正确定位视图。是否有一种简单的方法可以使这个线性布局及其内部所有内容都具有可缩放性?还是将整个布局文件变为可缩放性更容易? 我有哪些选项?

2个回答

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());

如果我尝试这样做的根布局不是ImageView,而是一个包含其他视图和布局的布局,这是否有效? - Peter
您可以使用任何视图类来扩展它。缩放手势将检测视图的大小,您可以相应地限制其重叠到另一个视图上。 - Jan
那么我应该使用这个来扩展从启动布局的活动吗? - Peter
由于Java不允许扩展多个类,因此您的activity类将保持不变。您需要创建另一个视图类来扩展视图类。然后调用您的新视图类的构造函数到活动类中。 - Jan

1

您可以查看静态转换。任何ViewGroup或其子类都可以自定义以将转换应用于其子视图。通过调用setStaticTransformationsEnabled(true)并覆盖您的自定义ViewGroup中的getChildStaticTransformation()回调(docs link),您可以启用此功能。您可以应用任何您喜欢的转换,包括缩放以创建缩放效果。每次需要重新绘制或无效时,都会调用此回调。

此外,在使用硬件加速时要小心。根据您需要更新转换的频率,您可能会发现硬件无法按照您的预期重新绘制。如果是这样,您需要为此视图层次结构启用软件层。


example - Leonidos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接