/**
* @author vivek
*/
//=========================================================
public class CategoriesSlideView extends LinearLayout implements View.OnTouchListener{
private final static int Offset = 30, MaxAlpha = 180;
private float startX = 0;
private int dwidth = 0;
private View overlay;
//=================================
public CategoriesSlideView(Context context, AttributeSet attrs) {
super(context, attrs);
}
//=================================
@Override
public void onAttachedToWindow(){
super.onAttachedToWindow();
if(android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.LOLLIPOP)
setElevation(20f);
setOnTouchListener(this);
animate().alpha(0).setDuration(0).start();
startX = getX();
postDelayed(new Runnable(){public void run(){
WindowManager mgr = (WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
mgr.getDefaultDisplay().getMetrics(dm);
dwidth = dm.widthPixels;
View parent = (View)getParent();
ValueAnimator anim = ObjectAnimator.ofFloat(CategoriesSlideView.this, "translationX", 0, parent.getX()+parent.getWidth()-Offset);
anim.setDuration(0);
anim.start();
}}, 400);
}
//=================================
private void openIt(){
animate().alpha(1).setDuration(0).start();
ValueAnimator anim = ObjectAnimator.ofFloat(CategoriesSlideView.this, "translationX", getX(), dwidth-getWidth());
anim.setDuration(200);
anim.start();
}
//=================================
public void openDirect(){
openIt();
addOverlay();
overlay.getBackground().setAlpha(MaxAlpha);
}
//=================================
public void closeDirect(){
closeIt();
}
//=================================
private void closeIt(){
ValueAnimator anim = ObjectAnimator.ofFloat(CategoriesSlideView.this, "translationX", getX(), dwidth-Offset);
anim.setDuration(200);
anim.start();
animate().alpha(0).setDuration(300).start();
overlay.setVisibility(View.GONE);
}
//=================================
private void addOverlay(){
if(overlay!=null && overlay.getVisibility()==View.VISIBLE) return;
ViewGroup parent = (ViewGroup)getParent();
overlay = new View(getContext());
overlay.setBackgroundColor(Color.BLACK);
overlay.getBackground().setAlpha(10);
parent.addView(overlay);
overlay.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
closeIt();
}
});
bringToFront();
}
//=================================
@Override
public boolean onInterceptTouchEvent(MotionEvent event){
return false;
}
//=================================
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
addOverlay();
animate().alpha(1).start();
break;
case MotionEvent.ACTION_UP:
if((dwidth-event.getRawX())>((getWidth()*2)/3)){
openIt();
}else{
closeIt();
}
break;
default:
if((dwidth-event.getRawX())>(startX+getWidth()))
return true;
v.setX(event.getRawX());
overlay.getBackground().setAlpha((int)((1-(event.getRawX()/dwidth))*MaxAlpha));
break;
}
return true;
}
}