Анимация ширины изображения без масштабирования

Я пытаюсь оживить ImageView, поэтому он медленно отображается слева направо. Когда я спросил об этом, прежде чем у меня возникли проблемы с объяснением того, что я хотел, на этот раз я создал желаемый эффект с помощью HTML / JS:

http://jsfiddle.net/E2uDE/

Какой был бы лучший способ получить этот эффект в Android?

Я попытался изменить scaleType, а затем применить ScaleAnimation непосредственно к этому ImageView:

Планировка:

<ImageView android:id="@+id/graphImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:scaleType="centerCrop" android:background="@android:color/transparent" android:contentDescription="@string/stroom_grafiek" /> 

Ява:

 scale = new ScaleAnimation((float)0, (float)1, (float)1, (float)1, Animation.RELATIVE_TO_SELF, (float)0, Animation.RELATIVE_TO_SELF, (float)1); scale.setDuration(1000); graphImage.startAnimation(scale); 

Но этот стиль масштабирует изображение.

Я также попытался обернуть ImageView в FrameLayout, надеясь, что смогу просто анимировать FrameLayout:

 <FrameLayout android:layout_width="70dp" android:layout_height="fill_parent" android:clipChildren="true""> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|left|clip_horizontal" /> </FrameLayout> 

Это по-прежнему будет пытаться масштабировать мой ImageView для размещения внутри FrameLayout.

Существует несколько способов сделать это – одним из способов является простое изменение клипа на холсте (т. Е. Область, где разрешено рисование) изображения ImageView рисующего ваше изображение. Медленное увеличение правого края границ рисования приведет к тому же эффекту, что и в вашей примерной ссылке.

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

Посмотрите на метод onDraw класса CoveredImageView , который имеет следующую базовую структуру:

 @Override protected void onDraw(Canvas canvas) { ... canvas.getClipBounds(mRect); mRect.right = ...; canvas.clipRect(mRect); ... super.onDraw(canvas); ... invalidate(); } 

Клип отрегулирован, а затем вызывается invalidate (), вызывая onDraw () для вызова снова.

Я также написал код для интерполяции правильного значения клипа с прошедшего времени, который не зависит от какой-либо конкретной версии Android. Однако, в качестве примечания, из Android 3.0 появилась новая анимационная среда и класс ValueAnimator, которые могли бы помочь в выполнении таких задач.

Вы можете наложить свое изображение на другое, например одно с простым белым. Затем вы можете анимировать перекрывающееся изображение, не беспокоясь о масштабе, пока оно не будет иметь ширину 0 и удалит его. Для этого вам нужно разместить свой ImageView в RelativeLayout ofc.