您的位置:首页 > 移动开发 > Android开发

Android 滑动菜单的实现

2015-10-22 21:22 453 查看
这个代码主要是为了写滑动菜单的实现。实现效果如图左图为主页面图,右图为滑动之后的结果图

实现代码见连接 http://download.csdn.net/detail/w472398682/9204585




package com.haiwangch.floatview;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;

public class MainActivity extends Activity implements View.OnTouchListener {
//侧滑的主页面
private LinearLayout content;
//菜单页面
private LinearLayout menu;
private LinearLayout.LayoutParams contentParams;
private LinearLayout.LayoutParams menuParams;
//触摸屏移动的位移
private float xDown;
private float xMove;
private float xUp;
private int screenWidth;
//给主页面留下的空间
private int contenRight = 100;
//判断是主页面还是菜单位于显示页面
boolean isContent = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
content = (LinearLayout)findViewById(R.id.content);
menu = (LinearLayout) findViewById(R.id.menu);
contentParams =(LinearLayout.LayoutParams) content.getLayoutParams();
menuParams = (LinearLayout.LayoutParams) menu.getLayoutParams();
content.setOnTouchListener(this);
screenWidth = getScreenWidth();
contentParams.width =screenWidth;
menuParams.width =screenWidth - contenRight;
menuParams.leftMargin = -menuParams.width;
menu.setLayoutParams(menuParams);
content.setLayoutParams(contentParams);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
xDown = event.getRawX();
menu.setLayoutParams(menuParams);
//                Log.i("Down","down");
break;
case MotionEvent.ACTION_MOVE:
xMove = event.getRawX();
float distance = xMove - xDown;
if (isContent){
if (menuParams.leftMargin>= (-menuParams.width)){
menuParams.leftMargin =(int)((-menuParams.width) + distance);
//                       Log.i("Move","move111111111");
if (menuParams.leftMargin>=0){
menuParams.leftMargin = 0;
isContent = false;
}
if (menuParams.leftMargin<=(-menuParams.width)){
menuParams.leftMargin = -menuParams.width;
isContent = true;
}
}
}else {
if (menuParams.leftMargin>= (-menuParams.width)){
//                        menuParams.leftMargin =(int)((-menuParams.width) + distance);
menuParams.leftMargin = (int)distance;

if (menuParams.leftMargin>=0){
menuParams.leftMargin = 0;
isContent = false;
}
if (menuParams.leftMargin<=(-menuParams.width)){
menuParams.leftMargin = -menuParams.width;
isContent = true;
}
}
}
menu.setLayoutParams(menuParams);

break;
case MotionEvent.ACTION_UP:
xUp = event.getRawX();
if (isInContetn()){
if (menuParams.leftMargin>=(-menuParams.width)){
if ((xUp - xDown) >(getScreenWidth()/2)){
menuParams.leftMargin = 0;
}
if ((xUp - xDown) < (-(getScreenWidth()-contenRight)/2)){
menuParams.leftMargin = -menuParams.width;
}

if (menuParams.leftMargin>=0){
menuParams.leftMargin = 0;
isContent = false;
}
if (menuParams.leftMargin<=(-menuParams.width)){
menuParams.leftMargin = -menuParams.width;
isContent = true;
}
}
}
menu.setLayoutParams(menuParams);
Log.i("UP","up");
break;
}
return true;
}

public int getScreenWidth(){
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
display.getMetrics(displayMetrics);
return  displayMetrics.widthPixels;
}

public boolean isInContetn(){
if (menuParams.leftMargin <0){
return true;
}
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: