在旋转ImageView时调用新活动

时间:2014-11-10 16:28:36

标签: android xml android-animation

我在android中尝试动画。我想只旋转图像视图而不会打扰它下面的水平滚动视图。此外,当动画完成时,我想开始一个新的活动。我不想使用片段,因为我想在翻转完成时开始新的活动。因为,现在应用程序正常工作,但它不平滑,水平滚动视图也旋转。此外,它似乎不是旋转。当我将alpha属性放在rotate_in.xml中时,它会给出一个错误:“子元素必须格式良好”请帮助。 以下是源代码:

布局1:

 LinearLayout 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"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.fromscratch.MainActivity" >


    <ImageView
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:src="@drawable/you"
        android:id="@+id/you" >  
         </ImageView>
     <HorizontalScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" 
            android:layout_marginBottom="10dp">

            <ImageButton
                android:id="@+id/date"
                android:layout_width="100dip"
                android:layout_height="100dip"
                android:layout_marginTop="26dp"
                android:scaleType="fitXY"
                android:src="@drawable/date" />

            <ImageButton
                android:id="@+id/mission"
                android:layout_width="100dip"
                android:layout_height="100dip"
                android:layout_marginTop="26dp"
                android:scaleType="fitXY"
                android:src="@drawable/mission" />

            <ImageButton
                android:id="@+id/youu"
                android:layout_width="100dip"
                android:layout_height="100dip"
                android:layout_marginTop="26dp"
                android:scaleType="fitXY"
                android:src="@drawable/you" />

            <ImageButton
                android:id="@+id/competitionn"
                android:layout_width="100dip"
                android:layout_height="100dip"
                android:layout_marginTop="26dp"
                android:scaleType="fitXY"
                android:src="@drawable/competition" />


        </LinearLayout>
    </HorizontalScrollView>

</LinearLayout>

布局2:

<LinearLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.fromscratch.MainActivity" 
    android:orientation="vertical">


    <ImageView
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:src="@drawable/competition"
        android:id="@+id/competition" >   
         </ImageView>




    <HorizontalScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" 
            android:layout_marginBottom="10dp">

            <ImageButton
                android:id="@+id/date"
                android:layout_width="100dip"
                android:layout_height="100dip"
                android:layout_marginTop="26dp"
                android:scaleType="fitXY"
                android:src="@drawable/date" />

            <ImageButton
                android:id="@+id/mission"
                android:layout_width="100dip"
                android:layout_height="100dip"
                android:layout_marginTop="26dp"
                android:scaleType="fitXY"
                android:src="@drawable/mission" />

            <ImageButton
                android:id="@+id/you"
                android:layout_width="100dip"
                android:layout_height="100dip"
                android:layout_marginTop="26dp"
                android:scaleType="fitXY"
                android:src="@drawable/you" />

            <ImageButton
                android:id="@+id/competitionn"
                android:layout_width="100dip"
                android:layout_height="100dip"
                android:layout_marginTop="26dp"
                android:scaleType="fitXY"
                android:src="@drawable/competition" />


        </LinearLayout>
    </HorizontalScrollView>

</LinearLayout>

rotate_in.xml:

<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
   android:interpolator="@android:anim/accelerate_interpolator"
    android:duration="200"
    android:fromXScale="0.0"
    android:fromYScale="0.90"

    android:pivotX="50%"
    android:pivotY="50%"
    android:startOffset="500"
    android:toXScale="1.0"
    android:toYScale="1.0" />

rotate_out.xml

<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0.0"
    android:toYScale="0.90" />

我在第二个活动中使用它 overridePendingTransition(R.anim.rotate_in,R.anim.rotate_out);

使用fadein和fadeout动画时,该应用程序可以正常运行。请帮忙。

1 个答案:

答案 0 :(得分:0)

首先,如果您只想旋转一个ImageView,而不是活动的整个内容,那么设置活动转换似乎不是一种方法。如果你告诉Android为一个活动设置动画,那么它将为整个活动设置动画。

另一种方法是直接将动画附加到ImageView。当用户单击(或您正在使用的任何触发器)时,您可以启动动画,首先设置动画侦听器,因此当动画完成时,您将启动新活动。像这样:

View you = findViewById(R.id.you);
RotateAnimation anim = new RotateAnimation(0f, 90f);
anim.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        //TODO launch the other activity
        finish(); // Finish this activity
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
    }
});
you.startAnimation(anim);

我在代码中创建动画,但你当然可以把它放在XML中。此外,我使用RotateAnimation而不是ScaleAnimation,因为你说你想旋转它。