Создайте макет андроида и вложенные макеты в масштабируемом

Я работал над приложением со сложными макетами. Недавно я понял, что мне нужно сделать детали или все мои макеты масштабируемыми.

Один из моих основных xml файлов имеет линейный макет с несколькими вложенными в него макетами, чтобы правильно позиционировать представления. Есть ли простой способ сделать этот линейный макет и все внутри масштабируемого? Или было бы проще сделать весь файл макета масштабируемым? Каковы мои варианты?

Ответ 1

Прежде всего, расширьте этот класс с помощью этого конкретного вида

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

Ответ 2

Возможно, вы посмотрите на статические преобразования. Любой ViewGroup или подкласс может быть настроен для применения преобразования к его дочерним представлениям. Вы включаете это, вызывая setStaticTransformationsEnabled(true), а затем переопределяя обратный вызов getChildStaticTransformation() (docs link) в своем пользовательском ViewGroup. Вы можете применить любое преобразование, которое вам нравится, включая масштаб для создания эффекта масштабирования. Этот обратный вызов будет вызываться в любое время, когда представление нужно перерисовать или сделать недействительным.

Кроме того, будьте осторожны при использовании этого наряду с аппаратным ускорением. В зависимости от частоты, с которой вам необходимо обновить преобразования, вы можете обнаружить, что аппаратное обеспечение не работает, чтобы перерисовать, как вы ожидаете. Если это так, вам необходимо включить слои программного обеспечения для этой иерархии представлений.