2016-12-21 12 views
0

У меня есть изображение для фона моего макета. Я хочу, чтобы он начал двигаться вправо, и каждый кадр, который исчезает справа, должен появиться слева. Поэтому изображение будет непрерывно перемещаться только с одним кадром фотографии. Как я могу это сделать?Постоянно перемещайте фон вправо и заводите его слева

+1

попробовать, если это что вы хотите [Как перенести изображение слева направо в android] (http://stackoverflow.com/questions/4689918/how-to-move-an-image-from-left-to-right-in-android) – BrunoM24

ответ

0

Самый простой и быстрый способ сделать так, чтобы это с двумя 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 делает вид рывками, когда это действительно не):

Infinite loop for imageviews from right to left

+0

Большое вам спасибо. Работал ! –

0

Обновленный код:

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 
+0

Но это не заставит img начать движение с левой стороны. Мне нужно, чтобы это было правильно, как и было, а затем появилось с левой стороны и выглядело так, как будто оно продолжается. –

+0

Его как петля слева направо? – HsRaja

+0

Я обновил код, пожалуйста, попробуйте этот. Спасибо заранее – HsRaja