package com.moupress.app.friendshost.uicomponent;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.moupress.app.friendshost.R;
public class SlidingPanel extends LinearLayout{
private int speed=300;
private float distance =0;
private int width;
private boolean isOpen=false;
private PanelSlidingListener panelSlidingListener;
private int viewId;
private ViewGroup refViewGroup;
public SlidingPanel(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a= context.obtainStyledAttributes(attrs, R.styleable.SlidingPanel,0, 0);
speed=a.getInt(R.styleable.SlidingPanel_speed, 300);
//distance = a.getDimension(R.styleable.SlidingPanel_targetDistance, 60);
a.recycle();
}
public void SetAlignViewId(int viewId)
{
this.viewId = viewId;
}
public void Slide2Left()
{
if(!isOpen)
toggle();
}
public boolean Slide2Right()
{
if(isOpen)
{
toggle();
return true;
}
else
{
return false;
}
}
public void toggle() {
TranslateAnimation anim=null;
isOpen=!isOpen;
if(this.refViewGroup == null)
this.refViewGroup = (ViewGroup) this.getRootView().findViewById(viewId);
if(distance == 0)
distance = this.refViewGroup.getWidth();
if (isOpen) {
//setVisibility(View.VISIBLE);
anim=new TranslateAnimation(0.0f, distance ,0.0f,0.0f);
anim.setAnimationListener(popUpListener);
}
else {
anim=new TranslateAnimation(distance, 0.0f, 0.0f,0.0f);
anim.setAnimationListener(collapseListener);
}
//anim.setFillEnabled(true);
anim.setFillAfter(true);
//anim.setFillBefore(false);
anim.setDuration(speed);
anim.setInterpolator(new AccelerateInterpolator(1.0f));
//v.startAnimation(anim);
startAnimation(anim);
}
Animation.AnimationListener popUpListener=new Animation.AnimationListener() {
public void onAnimationEnd(Animation animation) {
//params.setMargins((int) distance, 0, 0, 0);
//params.leftMargin = (int) distance;
// RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
// params.addRule(RelativeLayout.RIGHT_OF, viewId);
// params.width = width;
// setLayoutParams(params);
//setVisibility(View.GONE);
refViewGroup.bringToFront();
panelSlidingListener.onSlidingUpEnd();
}
public void onAnimationRepeat(Animation animation) {
// not needed
}
public void onAnimationStart(Animation animation) {
//width = getWidth();
}
};
Animation.AnimationListener collapseListener=new Animation.AnimationListener() {
public void onAnimationEnd(Animation animation) {
// RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
// params.addRule(RelativeLayout.ALIGN_TOP, viewId);
// setLayoutParams(params);
//setVisibility(View.GONE);
panelSlidingListener.onSlidingDownEnd();
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationStart(Animation animation) {
// not needed
// RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
// params.width = width;
// setLayoutParams(params);
bringToFront();
}
};
public void setPanelSlidingListener(PanelSlidingListener panelSlidingListener)
{
this.panelSlidingListener = panelSlidingListener;
}
public interface PanelSlidingListener{
public void onSlidingUpEnd();
public void onSlidingDownEnd();
}
public void setOpen(boolean open) {
// TODO Auto-generated method stub
this.isOpen = open;
}
public boolean getOpen()
{
return this.isOpen;
}
}