How to create a looping animation by continuous translating an image?

前端 未结 2 904
离开以前
离开以前 2021-02-04 17:26

By using a repeating image like this,

\"repeating

is it possible to create animation like this?

相关标签:
2条回答
  • 2021-02-04 18:13

    bottom to top infinite animation i implement this way. it's too easy just use two image and animated one after another.

    Inside MainActivity.java

            imageView_background1 = (ImageView) findViewById(R.id.imageView_background1);
            imageView_background1.setVisibility(View.GONE);
            imageView_background1.setVisibility(View.VISIBLE);
            Animation mAnimation = new TranslateAnimation(
                    TranslateAnimation.ABSOLUTE, 0f,
                    TranslateAnimation.ABSOLUTE, 0f,
                    TranslateAnimation.RELATIVE_TO_PARENT, 0f,
                    TranslateAnimation.RELATIVE_TO_PARENT, -1f);
            mAnimation.setDuration(10000);
            mAnimation.setRepeatCount(-1);
            mAnimation.setRepeatMode(Animation.INFINITE);
            mAnimation.setInterpolator(new LinearInterpolator());
            imageView_background1.setAnimation(mAnimation);
    
            imageView_background2 = (ImageView) findViewById(R.id.imageView_background2);
            imageView_background2.setVisibility(View.VISIBLE);
            Animation mAnimation1 = new TranslateAnimation(
                    TranslateAnimation.ABSOLUTE, 0f,
                    TranslateAnimation.ABSOLUTE, 0f,
                    TranslateAnimation.RELATIVE_TO_SELF, 1f,
                    TranslateAnimation.RELATIVE_TO_SELF, 0f);
            mAnimation1.setDuration(10000);
            mAnimation1.setRepeatCount(-1);
            mAnimation1.setRepeatMode(Animation.INFINITE);
            mAnimation1.setInterpolator(new LinearInterpolator());
            imageView_background2.setAnimation(mAnimation1);
    

    Inside activity_main.xml (use same image both imageview)

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/ic_splash_background">
        <ImageView
            android:id="@+id/imageView_background1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/ic_splash_categories" />
        <ImageView
            android:id="@+id/imageView_background2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/ic_splash_categories" />
    </FrameLayout>
    
    0 讨论(0)
  • 2021-02-04 18:20

    I figured it out


    MainActivity.java:

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            final int screenWidth = getScreenDimensions(this).x;
            final int waveImgWidth = getResources().getDrawable(R.drawable.wave).getIntrinsicWidth();
            int animatedViewWidth = 0;
            while (animatedViewWidth < screenWidth) {
                animatedViewWidth += waveImgWidth;
            }
            animatedViewWidth += waveImgWidth;
    
    
            View animatedView = findViewById(R.id.animated_view);
            FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) animatedView.getLayoutParams();
            layoutParams.width = animatedViewWidth;
            animatedView.setLayoutParams(layoutParams);
    
    
            Animation waveAnimation = new TranslateAnimation(0, -waveImgWidth, 0, 0);
            waveAnimation.setInterpolator(new LinearInterpolator());
            waveAnimation.setRepeatCount(Animation.INFINITE);
            waveAnimation.setDuration(2500);
    
            animatedView.startAnimation(waveAnimation);
        }
    
        public static Point getScreenDimensions(Context context) {
            int width = context.getResources().getDisplayMetrics().widthPixels;
            int height = context.getResources().getDisplayMetrics().heightPixels;
            return new Point(width, height);
        }
    
    }
    


    activity_main.xml:

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <View
            android:id="@+id/animated_view"
            android:layout_width="match_parent"
            android:layout_height="74dp"
            android:background="@drawable/wave_repeating_bg" />
    
    </FrameLayout>
    


    wave_repeating_bg.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/wave"
        android:tileMode="repeat" />
    


    drawable-xxhdpi/wave.jpg:
    enter image description here

    0 讨论(0)
提交回复
热议问题