public class MainActivity extends AppCompatActivity {
private SlidingView slidingView;
private View menuView;
private View contentView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
slidingView = findViewById(R.id.sv);
menuView = LayoutInflater.from(this).inflate(R.layout.layout_menu,null);
contentView = LayoutInflater.from(this).inflate(R.layout.layout_content,null);
slidingView.addContent(contentView);
slidingView.addMenu(menuView);
}
}
public class SlidingView extends FrameLayout {
private LinearLayout contentLinear;
private LinearLayout menunLinear;
private int width = 400;
private PointF lastPointF = new PointF();
public SlidingView(Context context,AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
contentLinear = new LinearLayout(getContext());
FrameLayout.LayoutParams contentLp = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
contentLinear.setOrientation(LinearLayout.VERTICAL);
contentLinear.setLayoutParams(contentLp);
contentLinear.setBackgroundColor(Color.RED);
addView(contentLinear);
menunLinear = new LinearLayout(getContext());
FrameLayout.LayoutParams menulp = new FrameLayout.LayoutParams(width, LinearLayout.LayoutParams.MATCH_PARENT);
menulp.leftMargin = -width;
menunLinear.setOrientation(LinearLayout.VERTICAL);
menunLinear.setBackgroundColor(Color.BLUE);
menunLinear.setLayoutParams(menulp);
addView(menunLinear);
}
public void addContent(View view){
if(view == null){
return;
}
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
view.setLayoutParams(lp);
contentLinear.addView(view);
}
public void addMenu(View view){
if(view == null){
return;
}
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
view.setLayoutParams(lp);
menunLinear.addView(view);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_DOWN){
lastPointF.x = ev.getX();
lastPointF.y = ev.getY();
}else if(ev.getAction() == MotionEvent.ACTION_MOVE){
PointF pointF = new PointF(ev.getX(), ev.getY());
float distanceX = Math.abs(pointF.x - lastPointF.x);
float distanceY = Math.abs(pointF.y - lastPointF.y);
if((2*distanceY) > distanceX){
return super.dispatchTouchEvent(ev);
}
if(distanceX >= 10){
FrameLayout.LayoutParams lp = (LayoutParams) menunLinear.getLayoutParams();
if((pointF.x - lastPointF.x) < 0){
distanceX = -distanceX;
}
lp.leftMargin = (int) (lp.leftMargin+distanceX);
if(lp.leftMargin > 0){
lp.leftMargin = 0;
return true;
}
if(lp.leftMargin < -width){
lp.leftMargin = -width;
return true;
}
menunLinear.requestLayout();
lastPointF.x = pointF.x;
lastPointF.y = pointF.y;
}
}else if(ev.getAction() == MotionEvent.ACTION_UP){
FrameLayout.LayoutParams lp = (LayoutParams) menunLinear.getLayoutParams();
if(lp.leftMargin < -width/2){
lp.leftMargin = -width;
}else{
lp.leftMargin = 0;
}
menunLinear.requestLayout();
}
return super.dispatchTouchEvent(ev);
}
}