2つのビューが重なり合った垂直LinearLayoutがあります。上面ビューは展開可能なパネルである必要があります。クリックすると、他のビューに影響を与えることなく、下に展開する必要があります。底面図を常に上面図の「閉じた」バージョンに揃えたい。上面図は開いたバージョンにアニメーション化する必要があるため、開いたバージョンを背後に隠すことはできません。
これをどのように達成しますか?
2つのビューが重なり合った垂直LinearLayoutがあります。上面ビューは展開可能なパネルである必要があります。クリックすると、他のビューに影響を与えることなく、下に展開する必要があります。底面図を常に上面図の「閉じた」バージョンに揃えたい。上面図は開いたバージョンにアニメーション化する必要があるため、開いたバージョンを背後に隠すことはできません。
これをどのように達成しますか?
LinearLayoutはあなたが求めているものを許可しません。LinearLayoutの子をオーバーラップできるようにするレイアウトパラメータのセットはありません。
代わりにFrameLayoutを使用できます。ここでの秘訣は、レイアウトを適切にすることです。これがあなたがそれをするかもしれない方法の一例です。トップビューとボトムビューのIDを持つImageViewは、関心のあるビューであり、残りは、ビューを目的の場所に配置するための構造です。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:layout_width="fill_parent"
android:layout_height="70dip" />
<ImageView
android:id="@+id/bottomview"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:background="#FFFF0000"/>
</LinearLayout>
<ImageView
android:id="@+id/topview"
android:layout_width="fill_parent"
android:layout_height="70dip"
android:background="#FF00FF00"/>
</FrameLayout>
次に、onClickリスナーをトップビューに追加し、レイアウトパラメータを変更する必要があります。たとえば、ビューを展開する簡単な例を次に示します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView i=(ImageView)findViewById(R.id.topview);
i.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Make the view bigger
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,300);
v.setLayoutParams(lp);
v.invalidate();
}
});
... more code...
残りは、展開/折りたたみ状態を追跡するためのコードの追加とアニメーションの追加です。
お役に立てば幸いです。