我创建了一个复合视图,它有几个按钮,并且像抽屉一样动画。我已经创建了 xml 文件并在课堂上对其进行了扩充。您和我的代码之间的区别是膨胀视图。
这是我的代码。
public class ViewDashboard extends LinearLayout {
private Button openCloseButton;
private Button mBtnViewMyLoction, mBtnViewPhotos, mBtnViewFreeStuff, mBtnViewHotspot, mBtnViewMyTeams,
mBtnViewLeaderboard, mBtnViewLiveAction, mBtnViewHome, mBtnViewAppStats;
private Context mContext;
private boolean isVisible = false;
private RelativeLayout relLayTwo;
private int h;
public ViewDashboard(Context context , AttributeSet attr) {
super(context , attr);
mContext = context;
DisplayMetrics metric = new DisplayMetrics();
((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(metric);
h = metric.heightPixels;
View.inflate(context, R.layout.dashboard_drawer, this);
relLayTwo = (RelativeLayout) findViewById(R.id.relLayTwo);
openCloseButton = (Button) findViewById(R.id.btnDashboard);
mBtnViewPhotos = (Button) findViewById(R.id.btnDrawerPhotos);
mBtnViewFreeStuff = (Button) findViewById(R.id.btnDrawerFreeStuff);
mBtnViewLeaderboard = (Button) findViewById(R.id.btnDrawerLeaderboard);
mBtnViewLiveAction = (Button) findViewById(R.id.btnDrawerLiveAction);
mBtnViewHome = (Button) findViewById(R.id.btnDrawerHome);
mBtnViewAppStats = (Button) findViewById(R.id.btnDrawerAppStats);
mBtnViewHotspot = (Button) findViewById(R.id.btnDrawerHotspot);
mBtnViewMyTeams = (Button) findViewById(R.id.btnDrawerMyTeams);
View line = findViewById(R.id.line);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) relLayTwo.getLayoutParams();
Log.d("test", "height "+params.height);
params.height = h*40/100;
relLayTwo.setLayoutParams(params);
relLayTwo.setVisibility(View.GONE);
RelativeLayout.LayoutParams paramsLine = (RelativeLayout.LayoutParams) line.getLayoutParams();
paramsLine.height = h*80/100;
openCloseButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
LogMsg.d("USerID "+new UserID(mContext).getUserID());
if ( new UserID(mContext).getUserID().equals("")){
ToastMsg.showToast(mContext, "Please Login First");
}else{
toggle();
}
}
});
/* mBtnViewMyLoction.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toggle();
mContext.startActivity(new Intent(mContext, ActivityMyLocation.class).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP).setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
}
});*/
mBtnViewHotspot.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toggle();
//mContext.startActivity(new Intent(mContext, ActivityHotspots.class).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP).setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
mContext.startActivity(new Intent(mContext, ActivityHotspots.class));
}
});
mBtnViewMyTeams.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toggle();
//mContext.startActivity(new Intent(mContext, ActivityMyTeams.class).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP).setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
mContext.startActivity(new Intent(mContext, ActivityMyTeams.class));
}
});
mBtnViewFreeStuff.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toggle();
//ToastMsg.showToast(mContext, "Not Available");
//mContext.startActivity(new Intent(mContext, ActivityFreeStuff.class).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP).setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
mContext.startActivity(new Intent(mContext, ActivityFreeStuff.class));
}
});
mBtnViewAppStats.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toggle();
//mContext.startActivity(new Intent(mContext, ActivityAppStats.class).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP).setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
mContext.startActivity(new Intent(mContext, ActivityAppStats.class));
}
});
mBtnViewPhotos.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toggle();
//mContext.startActivity(new Intent(mContext, ActivityPhotos.class).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP).setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
mContext.startActivity(new Intent(mContext, ActivityPhotos.class));
}
});
mBtnViewHome.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toggle();
mContext.startActivity(new Intent(mContext, ActivityHome.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
}
});
mBtnViewLeaderboard.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toggle();
//mContext.startActivity(new Intent(mContext, ActivityLeaderborad.class).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP).setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
mContext.startActivity(new Intent(mContext, ActivityLeaderborad.class));
}
});
mBtnViewLiveAction.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toggle();
//mContext.startActivity(new Intent(mContext, ActivityLiveAction.class).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP).setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
mContext.startActivity(new Intent(mContext, ActivityLiveAction.class));
}
});
}
public void toggle() {
TranslateAnimation anim = null;
isVisible = !isVisible;
if (isVisible) {
relLayTwo.setVisibility(View.VISIBLE);
anim = new TranslateAnimation(0.0f, 0.0f, h*40/100, 0.0f);
LogMsg.d(" rel Height "+relLayTwo.getHeight());
} else {
anim = new TranslateAnimation(0.0f, 0.0f, 0.0f, relLayTwo.getHeight());
anim.setAnimationListener(collapseListener);
}
anim.setDuration(300);
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
}
};
}