您的位置:首页 > 其它

模仿 QQ侧边栏 onClick 和 onTouch共存 问题

2016-01-04 16:42 337 查看
package com.infzm.slidingmenu.demo;

import android.graphics.PointF;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView;

import com.infzm.slidingmenu.demo.fragment.LeftFragment;
import com.infzm.slidingmenu.demo.fragment.TodayFragment;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;

/**
* @date 2014/11/14
* @author wuwenjie
* @description 主界面
*/
public class MainActivity extends SlidingFragmentActivity implements
OnClickListener {

private ImageView topButton;
private Fragment mContent;
private TextView topTextView;

@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE); // 无标题
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initSlidingMenu(savedInstanceState);

topButton = (ImageView) findViewById(R.id.topButton);
topButton.setOnClickListener(this);
topTextView = (TextView) findViewById(R.id.topTv);
}

/** 记录点击的点 */
PointF pointDown = new PointF();
/**
* 初始化侧边栏
*/
private void initSlidingMenu(Bundle savedInstanceState) {
// 如果保存的状态不为空则得到之前保存的Fragment,否则实例化MyFragment
if (savedInstanceState != null) {
mContent = getSupportFragmentManager().getFragment(
savedInstanceState, "mContent");
}

if (mContent == null) {
mContent = new TodayFragment();
}

// 设置左侧滑动菜单
setBehindContentView(R.layout.menu_frame_left);
getSupportFragmentManager().beginTransaction()
.replace(R.id.menu_frame, new LeftFragment()).commit();

// 实例化滑动菜单对象
SlidingMenu sm = getSlidingMenu();
// 设置可以左右滑动的菜单
sm.setMode(SlidingMenu.LEFT);
// 设置滑动阴影的宽度
sm.setShadowWidthRes(R.dimen.shadow_width);
// 设置滑动菜单阴影的图像资源
sm.setShadowDrawable(null);
// 设置滑动菜单视图的宽度
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// 设置渐入渐出效果的值
sm.setFadeDegree(0.35f);
// 设置触摸屏幕的模式,这里设置为全屏
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 设置下方视图的在滚动时的缩放比例
sm.setBehindScrollScale(0.0f);

sm.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
pointDown.x = event.getX();
pointDown.y = event.getY();
Log.e("pointdown: ", "" + pointDown.x +" , " + pointDown.y);
break;
case MotionEvent.ACTION_UP:
Log.e("pointUp: ", "" + event.getX() +" , " + event.getY());
Log.e("差值:", "" + Math.abs( PointF.length(event.getX() - pointDown.x , event.getY() - pointDown.y ) ) ) ;
if (Math.abs( PointF.length(event.getX() - pointDown.x , event.getY() - pointDown.y ) ) > 50f) {
toggle();
return true;
}
break;
}
return true;
}
});
}

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager().putFragment(outState, "mContent", mContent);
}

/**
* 切换Fragment
*
* @param fragment
*/
public void switchConent(Fragment fragment, String title) {
mContent = fragment;
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, fragment).commit();
getSlidingMenu().showContent();
topTextView.setText(title);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.topButton:
toggle();
break;
default:
break;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: