Относительный перевод в анимации свойств в xml - PullRequest
9 голосов
/ 14 декабря 2011

В настоящее время у меня есть ImageView, который увеличивает длину устройства и масштабируется на 3. Очевидно, что стороны обрезаются за пределами экрана. Я хочу, чтобы анимация начиналась с левой стороны изображения на левой стороне устройства, а затем сдвигала ее, пока правая сторона изображения не окажется на правой стороне устройства.

Я могу достичь их, настроив изображение на его первоначальную основу, а затем в основном сделаю это:

  <objectAnimator
    android:propertyName="translationX"
    android:duration="6000"
    android:valueTo="-1280"
    android:valueType="floatType"
  />

Однако это работает только потому, что я знаю точный размер изображения и точный размер моего Motorola Xoom. Естественно, я хочу, чтобы это работало на любом устройстве, поэтому мне нужно что-то менее жесткое. С анимацией Tween это работает хорошо, так как вы можете перевести что-то на основе процента от его размера. Это не было идеально, но это работало достаточно хорошо для этого эффекта. Похоже, что свойства анимирования не имеют этого. Свойства translationX и X должны иметь единицы измерения.

Есть ли простой способ перевести представление с анимацией свойств на основе относительного местоположения? Я собираюсь сделать отдельный файл анимации для каждого измерения? Есть ли другой способ добиться этого эффекта? Я бы предпочел не делать свою собственную анимацию.

Ответы [ 2 ]

0 голосов
/ 29 мая 2014

Вы должны создать анимацию во время выполнения, передав размер экрана текущего устройства.Сначала получите размер экрана (ПРИМЕЧАНИЕ: метрика (ширина, высота) изменяется в зависимости от поворота устройства) :

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int screenSize = metrics.widthPixels;

, а затем создайте объект ObjectAnimator:

ObjectAnimator oa = ObjectAnimator.ofFloat(*yourImageView*, "translationX", 0, (Float) screenSize);
oa.setDuration(6000);
oa.start();
0 голосов
/ 20 июня 2013

Не могли бы вы создать код для отдельных «корзин» размера устройства, которые вы хотите поддерживать (например, планшет, телефонная линия и т. Д.), Которые имеют ширину dp. Затем вы можете использовать это ниже для масштабирования изображения (где 384 - 384 dp для определенной ширины сегмента устройства) и сделать что-то похожее для значения, которое вам нужно.

//Get the device screen pixel density so that you can scale
//the image in density independent pixels rather than pixels
final float scale = getActivity().getResources().
getDisplayMetrics().density;

//set the number of dp for the height and width by changing
//the number you multiply the (scale + 0.5f) by e.g. 384
int pixelsh = (int) (384 * scale + 0.5f);
int pixelsw = (int) (384 * scale + 0.5f);

Это способ преобразования абсолютных пикселей в пиксели dp. Я не знаю, как использовать их для того, что вы делаете, но, по крайней мере, это начало.

...