I have followed this tutorial (http://stuffthathappens.com/blog/2008/11/13/android-animation-101/) and have a beautiful rotating text being drawn onto a canvas. Everything works perfectly when my main activity uses
setContentView(new SplashScreenAnimation(this));
Here is SplashScreenAnimation:
public class SplashScreenAnimation extends View {
private static final String QUOTE = "Nobody uses Java anymore. It's this big heavyweight ball and chain.";
private Animation anim;
public SplashScreenAnimation(Context context) {
super(context);
}
private void createAnim(Canvas canvas) {
anim = new RotateAnimation(0, 360, canvas.getWidth() / 2, canvas
.getHeight() / 2);
anim.setRepeatMode(Animation.REVERSE);
anim.setRepeatCount(Animation.INFINITE);
anim.setDuration(10000L);
anim.setInterpolator(new AccelerateDecelerateInterpolator());
startAnimation(anim);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// Creates the animation the first time
if (anim == null) {
createAnim(canvas);
}
Path circle = new Path();
int centerX = canvas.getWidth() / 2;
int centerY = canvas.getHeight() / 2;
int r = Math.min(centerX, centerY);
circle.addCircle(centerX, centerY, r, Direction.CW);
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setTextSize(30);
paint.setAntiAlias(true);
canvas.drawTextOnPath(QUOTE, circle, 0, 30, paint);
}
}
However I want to combine this animated text and have two buttons underneath it so I have a RelativeLayout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/RelativeLayout1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@drawable/splash_screen">
<LinearLayout android:orientation="vertical"
android:layout_height="wrap_content" android:layout_width="fill_parent"
android:layout_alignParentBottom="true" android:id="@+id/bottomLinearLayout">
<Button android:layout_gravity="center_horizontal" android:id="@+id/playButton"
android:text="Button" android:layout_height="wrap_content"
android:layout_width="wrap_content"></Button>
<Button android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/optionsButton"
android:text="Button" android:layout_gravity="center_horizontal"
android:layout_marginBottom="30sp"></Button>
</LinearLayout>
<LinearLayout android:id="@+id/topLinearLayout"
android:orientation="vertical" android:layout_height="wrap_content"
android:layout_alignParentTop="true" android:layout_width="fill_parent">
</LinearLayout>
</RelativeLayout>
How can I add this custom view to the LinearLayout above? (topLinearLayout - it's the last one)
I've tried a lot of different things, and I keep ending up with force closes.
This sort of approach has been mainly what I've tried. I've tried inflating it, etc.
LinearLayout item = (LinearLayout)findViewById(R.id.topLinearLayout);
SplashScreenAnimation child = new SplashScreenAnimation(this);
item.addView(child);
I added entire SplashScreenAnimation class code:
((LinearLayout) findViewById(R.id.topLinearLayout)).addView(new SplashScreenAnimation(this))
It works!!
Why won't the other methods of adding it manually work? Has it something to do with the fact the animation needs to start via onDraw?
((LinearLayout) findViewById(R.id.topLinearLayout)).addView(new SplashScreenAnimation(this))