我在 Android 中有一个这样的表格布局:
1) Row == IMAGEVIEW | TEXTVIEW
2) Row == IMAGEVIEW | SPINNER
现在我需要做的是切换 TEXTVIEW/SPINNER。第 2 行的一个到第 1 行,第 1 行的一个到第 2 行。
如果有一点动画也很棒。我见过 Viewswitcher 和 Viewflipper 但这似乎不是我想要的。任何人都知道如何让它工作?
我的布局(其中一部分)如下所示:
<TableRow>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/left_layout_controlls"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:stretchColumns="*"
android:id="@+id/top_controlls"
android:layout_height="wrap_content">
<TableRow>
<ImageView
android:id="@+id/fromCountry_img"
android:src="@drawable/tc_rt_from"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_height="fill_parent"
/>
<TextView
android:id="@+id/fromCountry"
android:layout_marginTop="2px"
android:layout_marginLeft="2px"
android:background="@drawable/round_edges_main_controll"
android:layout_marginRight="2px"
android:layout_height="38px"
android:layout_width="160dip"/>
</TableRow>
</TableLayout>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:stretchColumns="*"
android:layout_below="@id/top_controlls"
android:layout_height="wrap_content">
<TableRow>
<ImageView
android:src="@drawable/tc_rt_to"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_height="fill_parent"
android:layout_below="@id/fromCountry_img"
/>
<Spinner
android:id="@+id/toCountry"
android:layout_height="wrap_content"
android:layout_marginTop="2px"
android:layout_marginBottom="2px"
android:layout_marginRight="2px"
android:layout_width="160dip"
android:layout_weight="1"
android:drawSelectorOnTop="true"/>
</TableRow>
</TableLayout>
更新:
我试过像这样切换控件,动画可以工作,但是当动画结束时,控件会跳回原来的位置。
知道为什么吗?
LinearLayout layout1 = ((LinearLayout) DataHolder.activityHolder.findViewById(R.id.top_controll));
LinearLayout layout2 = ((LinearLayout) DataHolder.activityHolder.findViewById(R.id.bottom_controll));
DataHolder.activityHolder.findViewById(R.id.toCountry));
TranslateAnimation a = new TranslateAnimation(
Animation.ABSOLUTE,0,Animation.ABSOLUTE,0,
Animation.ABSOLUTE,0,Animation.ABSOLUTE, 40);
a.setDuration(1200);
TranslateAnimation b = new TranslateAnimation(
Animation.ABSOLUTE,0,Animation.ABSOLUTE,0,
Animation.ABSOLUTE,0,Animation.ABSOLUTE, -40);
b.setDuration(1200);
layout1.startAnimation(a);
layout2.startAnimation(b);