Переключение 2 строк в таблице раскладки в Android - PullRequest
0 голосов
/ 27 июля 2011

У меня есть таблица раскладок в 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);

Ответы [ 3 ]

0 голосов
/ 27 июля 2011

Честно говоря, я думаю, что использование TableLayout для этой ситуации нецелесообразно. Хотя представленное вами представление подразумевает, что TableLayout является наиболее практичным, TableLayout спроектированы так, чтобы быть достаточно статичными. Я не знаю, что есть метод для удаления или анимации TableRows в TableLayout.

Я бы предложил использовать следующее:

<LinearLayout android:orientation="vertical" ... >
    <LinearLayout android:orientation="horizontal" ... > 
        CONTENTLAYOUTS
    </LinearLayout> 
    ... MORE LINEARLAYOUTS FOR MORE ROWS
</>

Затем вы можете манипулировать позициями этих предметов.

Например, вы можете сохранить текущие позиции как таковые:

LinearLayout layout1 = (LinearLayout) findViewById(R.id.layout1);
int position1 = layout1.getTop();

LinearLayout layout2 = (LinearLayout) findViewById(r.id.layout2);
int position2 = layout2.getTop();

AnimationSet animSet = new AnimationSet(...);
//define your animations here, or load them from resources
//to move each view to each of the two positions, changing the 
//Y coordinate of the Views

Убедитесь, что вы используете AnimationSet для одновременного выполнения обеих анимаций.

Надеюсь, это поможет! Дайте мне знать, если что-то из этого сбивает с толку, и я постараюсь разобраться.

0 голосов
/ 29 июля 2011

grmpf,

получил его на работу. Благодарю. ошибка заключалась в том, что я запустил это:

setFillAfter(true);

это будет сохраняться после окончания анимации

0 голосов
/ 27 июля 2011

Самый простой способ сделать это - иметь Spinner с видимостью GONE (которого нет в контейнере), где у вас есть TextView и TextView, где у вас есть Spinner. Тогда просто поменяйте видимость. Это решение не практично.

...