私が欲しいのは、ダッシュボード ボタンをクリックすると、SlidingDrawer のように開き、もう一度クリックすると閉じます。SlidingDrawer は非推奨であるため、このカスタム ドロワーを使用します。
今問題は、最初にボタンをクリックしたときを除いて、アニメーションなしで非常に速く開きますが、適切に閉じ、その後は正常に動作することです。
RelativeLayout Visible を作成し、その getHeight() を計算しようとすると、最初はゼロになり、その後適切な高さが得られることが問題であることがわかりました。
LogCat は次のとおりです。
これが私のXMLファイルです。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relLayOne"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#0000" >
<Button
android:id="@+id/btnNEWCLICK"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@drawable/dashboard" />
<RelativeLayout
android:id="@+id/relLayTwo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/btnNEWCLICK"
android:background="#000"
android:visibility="gone" >
<Button
android:id="@+id/loc"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:background="#000"
android:gravity="left|center_vertical"
android:paddingLeft="5dp"
android:text="My Location"
android:textColor="#fff"
android:textSize="20sp" />
<View
android:layout_width="0.1dp"
android:layout_height="108dp"
android:layout_centerInParent="true"
android:layout_marginBottom="15dp"
android:layout_marginTop="15dp"
android:background="#fff" />
<Button
android:id="@+id/phot"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:background="#000"
android:gravity="left|center_vertical"
android:paddingLeft="5dp"
android:text="Photos"
android:textColor="#fff"
android:textSize="20sp" />
<View
android:layout_width="fill_parent"
android:layout_height="0.1dp"
android:layout_below="@+id/phot"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="#fff" />
<Button
android:id="@+id/free"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/loc"
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:background="#000"
android:gravity="left|center_vertical"
android:paddingLeft="5dp"
android:text="Free stuff"
android:textColor="#fff"
android:textSize="20sp" />
<Button
android:id="@+id/leade"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/phot"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:background="#000"
android:gravity="left|center_vertical"
android:paddingLeft="5dp"
android:text="Leaderboard"
android:textColor="#fff"
android:textSize="20sp" />
<View
android:layout_width="fill_parent"
android:layout_height="0.1dp"
android:layout_below="@+id/leade"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="#fff" />
<Button
android:id="@+id/live"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/free"
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:background="#000"
android:gravity="left|center_vertical"
android:paddingLeft="5dp"
android:text="Live Action"
android:textColor="#fff"
android:textSize="20sp" />
<Button
android:id="@+id/home"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/leade"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:background="#000"
android:gravity="left|center_vertical"
android:paddingLeft="5dp"
android:text="Home"
android:textColor="#fff"
android:textSize="20sp" />
<View
android:layout_width="fill_parent"
android:layout_height="0.1dp"
android:layout_below="@+id/home"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="#fff" />
<Button
android:id="@+id/app"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/live"
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:background="#000"
android:gravity="left|center_vertical"
android:paddingLeft="5dp"
android:text="App stats"
android:textColor="#fff"
android:textSize="20sp" />
</RelativeLayout>
</RelativeLayout>
ここにコードがあります::
public class MoveView extends LinearLayout{
private Button openCloseButton;
private boolean isVisible = false;
private RelativeLayout relLayTwo, relLayOne;
private float animationHeight = 300.0f;
public MoveView(Context context , AttributeSet attr) {
super(context, attr);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.in, this);
relLayTwo = (RelativeLayout) findViewById(R.id.relLayTwo);
//relLayOne = (RelativeLayout) findViewById(R.id.relLayOne);
openCloseButton = (Button) findViewById(R.id.btnNEWCLICK);
openCloseButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
toggle();
}
});
Log.d("test", "before "+relLayTwo.getHeight());
if (relLayTwo.getHeight() == 0){
relLayTwo.setVisibility(View.VISIBLE);
relLayTwo.invalidate();
relLayTwo.refreshDrawableState();
//rel.setVisibility(View.INVISIBLE);
relLayTwo.setVisibility(View.GONE);
Log.d("test", "after "+relLayTwo.getHeight());
}
}
public void toggle() {
TranslateAnimation anim = null;
isVisible = !isVisible;
if (isVisible) {
relLayTwo.setVisibility(View.VISIBLE);
anim = new TranslateAnimation(0.0f, 0.0f, relLayTwo.getHeight(), 0.0f);
Log.d("test", " rel Height "+relLayTwo.getHeight());
} else {
Log.d("test", " rel Height else "+relLayTwo.getHeight() );
anim = new TranslateAnimation(0.0f, 0.0f, 0.0f, relLayTwo.getHeight());
anim.setAnimationListener(collapseListener);
}
anim.setDuration(600);
anim.setInterpolator(new AccelerateInterpolator(1.0f));
startAnimation(anim);
}
Animation.AnimationListener collapseListener = new Animation.AnimationListener() {
public void onAnimationEnd(Animation animation) {
relLayTwo.setVisibility(View.GONE);
}
public void onAnimationRepeat(Animation animation) {
// not needed
}
public void onAnimationStart(Animation animation) {
// not needed
}
};
}
onMeasure() メソッドを使用します。
@
Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.d("test", " RelativeLAyout In onMeaseure "+relLayTwo.getHeight() );
}