У меня есть изображение для фона моего макета. Я хочу, чтобы он начал двигаться вправо, и каждый кадр, который исчезает справа, должен появиться слева. Поэтому изображение будет непрерывно перемещаться только с одним кадром фотографии. Как я могу это сделать?Постоянно перемещайте фон вправо и заводите его слева
ответ
Самый простой и быстрый способ сделать так, чтобы это с двумя ImageView
сек в ViewGroup
и анимировать их с двумя Дифференц анимации. Получив ширину контейнера, первый будет перемещаться из своего положения (START
) в правый край (PARENT_WIDTH
), а второй будет следовать за пределами контейнера (-PARENT_WIDTH
) внутрь (START
). Наконец, повторите анимацию. INFINITE
сделает иллюзию реального цикла.
private ViewGroup parent;
private ImageView imgInner, imgOutter;
@Override
public void onCreate(...) {
...
parent = (ViewGroup) findViewById(R.id.parent_loop);
imgInner = (ImageView) findViewById(R.id.image_loop_inner);
imgOutter = (ImageView) findViewById(R.id.image_loop_outter);
...
setImageLoop();
}
private void setImageLoop() {
// Need a thread to get the real size or the parent
// container, after the UI is displayed
imgInner.post(new Runnable() {
@Override
public void run() {
TranslateAnimation outAnim =
new TranslateAnimation(
0f, parent.getWidth(), 0f, 0f);
// move from 0 (START) to width (PARENT_SIZE)
outAnim.setInterpolator(new LinearInterpolator());
outAnim.setRepeatMode(Animation.INFINITE); // repeat the animation
outAnim.setRepeatCount(Animation.INFINITE);
outAnim.setDuration(2000);
TranslateAnimation inAnim =
new TranslateAnimation(
- parent.getWidth(), 0f, 0f, 0f);
// move from out width (-PARENT_SIZE) to 0 (START)
inAnim.setInterpolator(new LinearInterpolator());
inAnim.setRepeatMode(Animation.INFINITE);
inAnim.setRepeatCount(Animation.INFINITE);
inAnim.setDuration(2000); // same duration as the first
imgInner.startAnimation(outAnim); // start first anim
imgOutter.startAnimation(inAnim); // start second anim
}
});
}
Контейнер ViewGroup имеет match_parent
по его ширине, но она может быть изменена, и, следовательно, атрибут START
будет заменен на что-то вроде parent.getLeft()
. Этот макет может быть LinearLayout
, RelativeLayout
или что угодно. Например, я использовал это:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="250dp"
...>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
.../>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
.../>
</FrameLayout>
Что дает этот мой вывод (иметь в виду GIF делает вид рывками, когда это действительно не):
Большое вам спасибо. Работал ! –
Обновленный код:
img = (ImageView) findViewById(R.id.imageView1);
TranslateAnimation animation = new TranslateAnimation(-95.0f, 740.0f,
0.0f, 0.0f); // new TranslateAnimation(xFrom,xTo, yFrom,yTo)
animation.setDuration(5000); // animation duration
animation.setRepeatCount(5); // animation repeat count
img.startAnimation(animation); // start animation
Но это не заставит img начать движение с левой стороны. Мне нужно, чтобы это было правильно, как и было, а затем появилось с левой стороны и выглядело так, как будто оно продолжается. –
Его как петля слева направо? – HsRaja
Я обновил код, пожалуйста, попробуйте этот. Спасибо заранее – HsRaja
попробовать, если это что вы хотите [Как перенести изображение слева направо в android] (http://stackoverflow.com/questions/4689918/how-to-move-an-image-from-left-to-right-in-android) – BrunoM24