Зацикливание рамки изображения в Android

1

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

Изображение 174551

Я хочу сделать анимацию, где волна движется, с animationlist мне понадобится более 400 кадров, а размер приложения вырастет...

Мне нужен способ переместить этот единственный кадр справа налево, любую помощь?

Теги:
loops
image
animation
wave

3 ответа

0
Лучший ответ

Вы можете создать собственный Drawable который реализует Animatable, и изображение перемещается справа налево. На самом деле это было бы очень полезно. Однако вы не сможете указать его из XML, вам придется его построить и установить его программно.

  • 0
    Я не очень хорошо понял, что вы имеете в виду K-балл
  • 0
    Пожалуйста, придерживайтесь английского. Вы можете создать свой собственный пользовательский Animatable класс, расширяющий класс Drawable , и Animatable его реализовать Animatable . Затем вы будете рисовать самостоятельно, каждый раз в другом положении, чтобы сгенерировать анимацию выделения из одного входного изображения.
Показать ещё 2 комментария
0

Вы даже можете создать gif и сыграть этот GIF: Ниже приведен код:

Класс MainActivity:

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(new MYGIFView(MainActivity.this));
    }

}

Класс MYGIFView:

import java.io.InputStream;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Movie;
import android.view.View;

class MYGIFView extends View {

    Movie movie, movie1;
    InputStream is = null, is1 = null;
    long moviestart;

    public MYGIFView(Context context) {
        super(context);

        // Provide your own gif animation file

        is = context.getResources().openRawResource(R.drawable.animation);
        movie = Movie.decodeStream(is);

    }

    @Override
    protected void onDraw(Canvas canvas) {

        canvas.drawColor(Color.WHITE);
        super.onDraw(canvas);
        long now = android.os.SystemClock.uptimeMillis();
        System.out.println("now=" + now);
        if (moviestart == 0) { // first time
            moviestart = now;

        }
        System.out.println("\tmoviestart=" + moviestart);
        int relTime = (int) ((now - moviestart) % movie.duration());
        System.out.println("time=" + relTime + "\treltime=" + movie.duration());
        movie.setTime(relTime);
        movie.draw(canvas, this.getWidth() / 2 - 20, this.getHeight() / 2 - 40);
        this.invalidate();
    }
}

Внутри выпадающей папки будет ваше изображение GIF.

0

во-первых, вам нужно удвоить размер вашего изображения src, имея 2 волны не один. Затем вы должны играть с рамками рамки вашего изображения, вам нужно подогнать только одну волну. это ключ.

обратите внимание на размер вашего изображения, особенно ширину.

для анимации, используйте это:

<?xml version="1.0" encoding="utf-8"?>
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0%"
    android:toXDelta="-50%"
    android:fromYDelta="0%"
    android:toYDelta="0%"
    android:duration="500"
    android:repeatCount="1000"
    android:interpolator="@android:anim/linear_interpolator"
    android:zAdjustment="top" />

например, вы можете назвать его res/anim/wave.xml

class (activity?):

    ...
    Animation anim = AnimationUtils.loadAnimation( this, R.anim.wave);
    anim.setRepeatMode(Animation.Infinite);
    animatedIm = (ImageView) findviewbyid(<your-id>)
    animatedIm.setAnimation(anim); 

вам может потребоваться играть с размером изображения, чтобы иметь непрерывную волну перемещения

Ещё вопросы

Сообщество Overcoder
Наверх
Меню