By using a repeating image like this,
is it possible to create animation like this?
By using a repeating image like this,
is it possible to create animation like this?
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:
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>