私の最後のコメントに基づいて、これが私が試した解決策であり、うまくいきます。要件に合わせて変更する必要がある場合があります。
背景が透明でマニフェスト内にタイトルのないアクティビティを実装します。
<activity
android:name="com.example.backgroundsensor.AnimatedActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="Animated activity" />
レイアウトを使用してコンテンツビューを次のように設定します。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
tools:ignore="MergeRootFrame" >
<View
android:id="@+id/visibleAreaView"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_gravity="center"
android:background="@android:color/holo_green_dark" />
</FrameLayout>
アクティビティは透過的であるため、visibleAreaView が画面に表示されます。activity() の OnCreate でビューの境界を設定できます。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.animated_activity);
// set the bounds of the animateView
}
また、finish メソッドを次のようにオーバーライドします。
boolean animateFirst=true;
@Override
public void finish() {
if(animateFirst)
{
animateFirst = false;
loadAnim();
}else
{
super.finish();
}
}
public void loadAnim() {
View v = findViewById(R.id.animateView);
float x= v.getX() + v.getRight()/2;
float y = v.getY();
anim = new ScaleAnimation(1.0f, 0.0f,1.0f, 0.0f, x, y);
anim.setDuration(300);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
findViewById(R.id.animateView).setVisibility(View.GONE);
AnimatedActivity.this.finish();
}
});
v.startAnimation(anim);
}