jquery手机侧滑菜单菜单只能向右滑了

手机是htc G20的 菜单的页面是上下滑动的 可以设置成左右滑动的么_百度知道
手机是htc G20的 菜单的页面是上下滑动的 可以设置成左右滑动的么
习惯了左右滑动 上下滑动的有点不适应 那位高手帮忙解决下 既方便有容易的办法
提问者采纳
没办改,就能实现左右滑动了.6桌面更好用,个人觉得相比HTC自带的3,只能下个桌面软件,目前go桌面最好用,再把所有的软件图标移到这个桌面去你说的是功能表里面是吧
顺便问下 我想把手机设置个自动开关机 在那里设置呢
系统没有自带这个,要去下载有这个功能的软件,去应用市场下载
提问者评价
其他类似问题
为您推荐:
您可能关注的推广
htc的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁推理与解密一直是人们喜闻乐见的娱乐形式,许多影视、小说或游戏...
华为麦芒系列作为一款面向年轻群体的产品,其特点就是走电信运营...
门窗开闭感应器有一个妙用,防范喵星人偷偷跑出房间干坏事,世界...
> 成为果粉很容易 8种隐藏快捷操作汇总
参考价格:屏幕尺寸:4.0英寸网友点评:
推荐经销商:
成为果粉很容易 8种隐藏快捷操作汇总
手机中国【原创】作者:手机中国 温子龙责任编辑:王孜日 06:59
向右滑动返回上一级
  笔者首先要说的这个手势操作非常实用,几乎适用于所有应用和界面。笔者在这里就拿大家最常用的短信界面举例,经常使用iPhone短信功能的用户在看完一条短信之后想返回上一级界面一般都会点击左上角的“信息”按钮,其实我们只要将手指放在屏幕左侧边缘向右滑动,就可以返回到上一级界面了,对于喜欢单手操作的用户来说非常实用。
向右滑动返回上级菜单
  对于这个操作想必很多用户都不知道,大家一般采取的方式都是点击返回键或者双击Home键来退出或返回上一级界面,但其实通过简单的手势操作我们也可以实现这个功能,并且非常方便。2...
07/29 17:2607/29 15:3707/29 10:0707/28 11:59
08/03 05:3008/03 05:3007/31 05:3907/31 05:30
07/31 02:0007/30 10:5407/30 09:3607/29 09:46
07/31 05:3507/29 16:0007/29 10:0007/27 05:39
48小时热门OS文章
近日,Windows 10桌面版系统已经正式发布,...
今年4月9日苹果发布了iOS 8.3正式版,时间仅...今天讲一下我开发&微读&阅读软件中实现的一个类似android主界面的滑屏控件,这个滑屏在微读的主界面和看书时左右滑平翻页中都有用到,在具体的应用效果如下:下载到手机中体验一下
微读软件:
新浪微博:
直接效果图 ,更多内容可以参看:
& & & &实现思路,刚开始的时候我是用ViewFlipper控件来做非常的简单但是实现不了拖拽移动屏幕的效果,最终放弃决定自定义一个控件实现这样效果。
接下来我详细的解说一下我开发时写的这个实验demo,软件中用的滑屏就是由这样的代码实现的。
& & & &首先新建一个控件类TouchPageView并且继承自ViewGroup,左右滑动换屏我的实现是在TouchPageView添加3个子view分别代表看不到的左边屏幕、可以看到的中间屏幕、看不到的右边屏幕,这样在滑屏时候就可以通过不断调整这3个view的位置实现连续不间断滑屏换屏,下面的实验中我分别把3个view设置成红色、绿色、黄色这样切换的时候可以看到明显效果,这3个view在TouchPageView的构造方法中调用init方法进行初始化:
private void init()
views= new ArrayList&LinearLayout&();
view1=new LinearLayout(context);
view1.setBackgroundColor(Color.YELLOW);
this.addView(view1);
TextView tv=new TextView(context);
tv.setText("测试");
view1.addView(tv);
views.add(view1);
view2=new LinearLayout(context);
view2.setBackgroundColor(Color.RED);
this.addView(view2);
views.add(view2);
view3=new LinearLayout(context);
view3.setBackgroundColor(Color.GREEN);
this.addView(view3);
views.add(view3);
final ViewConfiguration configuration = ViewConfiguration.get(getContext());
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
& & & &接下来的实现是关键,重写onLayout方法对3个view的显示位置布局进行控制,通过下面的这个方法,把3个view进行水平一个跟着一个进行布局显示。
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int childLeft = -1;
final int count = views.size();
//水平从左到右放置
for (int i = 0; i & i++) {
final View child =views.get(i);
if (child.getVisibility() != View.GONE) {
final int childWidth = child.getMeasuredWidth();
if(childLeft==-1)
childLeft=-childW
child.layout(childLeft, 0, childLeft + childWidth, child.getMeasuredHeight());
childLeft += childW
& & & &3个view位置放置好之后,接下来的实现实现手指在屏幕拖拽滑动时让3个view跟着手指的位置进行变化显示,这个肯定是在onTouchEvent方法中实现了,分别在MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP三个手指状态中进行控制,在下面的实现中还采用了VelocityTracker的方法对手指的滑动速度进行跟踪,这样根据滑动速度决定屏幕往哪个方向换屏,关键的代码如下:
public boolean onTouchEvent(MotionEvent ev){
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
mVelocityTracker.addMovement(ev);
final int action = ev.getAction();
final float x = ev.getX();
final float y = ev.getY();
switch (action) {
case MotionEvent.ACTION_DOWN://按下去
if(touchState==TOUCH_STATE_REST)
//记录按下去的的x坐标
lastMotionX =
touchState=TOUCH_STATE_MOVING;
isMoved=false;
case MotionEvent.ACTION_MOVE://拖动时
if(touchState==TOUCH_STATE_MOVING)
float offsetX=x-lastMotionX;
float offsetY=y-lastMotionY;
if(isMoved)
lastMotionX=x;
lastMotionY=y;
final int count = views.size();
//水平从左到右放置
for (int i = 0; i & i++) {
final View child =views.get(i);
if (child.getVisibility() != View.GONE) {
final int childWidth = child.getMeasuredWidth();
int childLeft = child.getLeft()+(int)offsetX;
child.layout(childLeft, 0, childLeft + childWidth, child.getMeasuredHeight());
childLeft += childW
else if(Math.abs(offsetX)&TOUCH_SLOP||Math.abs(offsetY)&TOUCH_SLOP)
//移动超过阈值,则表示移动了
isMoved=true;
removeCallbacks(mLongPressRunnable);
case MotionEvent.ACTION_UP://放开时
removeCallbacks(mLongPressRunnable);
if(isMoved)
if(touchState==TOUCH_STATE_MOVING)
touchState=TOUCH_STATE_SLOWING;
int sign=0;
final VelocityTracker velocityTracker = mVelocityT
//计算当前速度
puteCurrentVelocity(1000, mMaximumVelocity);
//x方向的速度
int velocityX = (int) velocityTracker.getXVelocity();
if(velocityX & SNAP_VELOCITY)//足够的能力向左
Log.e("enough to move left", "true");
else if (velocityX & -SNAP_VELOCITY)//足够的能力向右
Log.e("enough to move right", "right");
moveToFitView(sign);
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
mVelocityTracker = null;
return true;
& & & &完成手指滑的功能后,最后在手指离开屏幕的时候,让3个view滑动到合适的位置,保证当前屏幕只能看到一个完整的view另外2个view不可见,并且在滑动的过程中为了达到比较自然的效果,采用减速滑动的实现,这里是用了Handler进行间隔的减速移动效果,这样滑动起来比较舒服,其实最好的效果应该加入阻尼效果,就是让view一定程度的冲过屏幕边界然后在回弹,经过几次这样的缓减至速度为零然后最终停止,这个可以由各位自己去实现,并不难写。
int offset=0;
private void moveToFitView(int sign)
boolean b=swapView(sign);
View view1=views.get(1);
int left=view1.getLeft();
//int offset=0;
if(left!=0)
offset=-1*
moveView();
FlipAnimationHandler mAnimationH
int ovv=40;
private void moveView()
final int count = views.size();
if(offset!=0)
if(offset&0)
ovv=ovv-3;
if(Math.abs(offset)&Math.abs(ov))
offset=offset-
//水平从左到右放置
for (int i = 0; i & i++) {
final View child =views.get(i);
final int childWidth = child.getMeasuredWidth();
int childLeft = child.getLeft()+
child.layout(childLeft, 0, childLeft + childWidth, child.getMeasuredHeight());
childLeft += childW
if(mAnimationHandler==null)
mAnimationHandler = new FlipAnimationHandler();
mAnimationHandler.sleep(1);
touchState=TOUCH_STATE_REST;
class FlipAnimationHandler extends Handler {
public void handleMessage(Message msg) {
TouchPageView.this.moveView();
public void sleep(long millis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), millis);
整个自定义控件核心的思路和代码就上面这些了,实现效果请参看我的微读效果。
完整的代码:
package xx.
import java.util.ArrayL
import java.util.L
import android.content.C
import android.graphics.C
import android.graphics.C
import android.os.H
import android.os.M
import android.util.L
import android.view.MotionE
import android.view.VelocityT
import android.view.V
import android.view.ViewC
import android.view.ViewG
import android.widget.LinearL
import android.widget.TextV
public class TouchPageView extends ViewGroup{
private LinearLayout view1;
private LinearLayout view2;
private LinearLayout view3;
//速度跟踪
private VelocityTracker mVelocityT
private int mMaximumV
//手势临界速度,当速度超过这个时切换到下一屏
private static final int SNAP_VELOCITY = 100;
//停止状态
private final static int TOUCH_STATE_REST = 0;
//滚动状态
private final static int TOUCH_STATE_MOVING = 1;
//减速停止状态
private final static int TOUCH_STATE_SLOWING = 2;
//当前触摸状态
private int touchState = TOUCH_STATE_REST;
private boolean lock=
private float lastMotionX;
private float lastMotionY;
private List&LinearLayout&
//是否移动了
private boolean isM
//长按的runnable
private Runnable mLongPressR
//移动的阈值
private static final int TOUCH_SLOP=10;
public TouchPageView(Context context) {
super(context);
this.context=
private void init()
views= new ArrayList&LinearLayout&();
view1=new LinearLayout(context);
view1.setBackgroundColor(Color.YELLOW);
this.addView(view1);
TextView tv=new TextView(context);
tv.setText("测试");
view1.addView(tv);
views.add(view1);
view2=new LinearLayout(context);
view2.setBackgroundColor(Color.RED);
this.addView(view2);
views.add(view2);
view3=new LinearLayout(context);
view3.setBackgroundColor(Color.GREEN);
this.addView(view3);
views.add(view3);
final ViewConfiguration configuration = ViewConfiguration.get(getContext());
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int count = views.size();
for (int i = 0; i & i++) {
final View child =views.get(i);
child.measure(widthMeasureSpec,heightMeasureSpec);
int finalWidth, finalH
finalWidth = measureWidth(widthMeasureSpec);
finalHeight = measureHeight(heightMeasureSpec);
this.width=finalW
this.height=finalH
private int measureWidth(int measureSpec) {
int result = 0;
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
if (specMode == MeasureSpec.EXACTLY) {
result = specS
result = specS
private int measureHeight(int measureSpec) {
int result = 0;
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
if (specMode == MeasureSpec.EXACTLY) {
result = specS
result = specS
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int childLeft = -1;
final int count = views.size();
//水平从左到右放置
for (int i = 0; i & i++) {
final View child =views.get(i);
if (child.getVisibility() != View.GONE) {
final int childWidth = child.getMeasuredWidth();
if(childLeft==-1)
childLeft=-childW
child.layout(childLeft, 0, childLeft + childWidth, child.getMeasuredHeight());
childLeft += childW
//绘制子元素
protected void onDraw(Canvas canvas) {
//水平从左到右放置
int count = views.size();
for (int i = 0; i & i++) {
View child =views.get(i);
drawChild(canvas, child, getDrawingTime());
public boolean onTouchEvent(MotionEvent ev){
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
mVelocityTracker.addMovement(ev);
final int action = ev.getAction();
final float x = ev.getX();
final float y = ev.getY();
switch (action) {
case MotionEvent.ACTION_DOWN://按下去
if(touchState==TOUCH_STATE_REST)
//记录按下去的的x坐标
lastMotionX =
touchState=TOUCH_STATE_MOVING;
case MotionEvent.ACTION_MOVE://拖动时
if(touchState==TOUCH_STATE_MOVING)
float offsetX=x-lastMotionX;
float offsetY=y-lastMotionY;
if(isMoved)
lastMotionX=x;
lastMotionY=y;
final int count = views.size();
//水平从左到右放置
for (int i = 0; i & i++) {
final View child =views.get(i);
if (child.getVisibility() != View.GONE) {
final int childWidth = child.getMeasuredWidth();
int childLeft = child.getLeft()+(int)offsetX;
child.layout(childLeft, 0, childLeft + childWidth, child.getMeasuredHeight());
childLeft += childW
else if(Math.abs(offsetX)&TOUCH_SLOP||Math.abs(offsetY)&TOUCH_SLOP)
//移动超过阈值,则表示移动了
removeCallbacks(mLongPressRunnable);
case MotionEvent.ACTION_UP://放开时
removeCallbacks(mLongPressRunnable);
if(isMoved)
if(touchState==TOUCH_STATE_MOVING)
touchState=TOUCH_STATE_SLOWING;
int sign=0;
final VelocityTracker velocityTracker = mVelocityT
//计算当前速度
puteCurrentVelocity(1000, mMaximumVelocity);
//x方向的速度
int velocityX = (int) velocityTracker.getXVelocity();
if(velocityX & SNAP_VELOCITY)//足够的能力向左
Log.e("enough to move left", "true");
else if (velocityX & -SNAP_VELOCITY)//足够的能力向右
Log.e("enough to move right", "right");
moveToFitView(sign);
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
mVelocityTracker =
int offset=0;
private void moveToFitView(int sign)
boolean b=swapView(sign);
View view1=views.get(1);
int left=view1.getLeft();
//int offset=0;
if(left!=0)
offset=-1*
moveView();
FlipAnimationHandler mAnimationH
int ovv=40;
private void moveView()
final int count = views.size();
if(offset!=0)
if(offset&0)
ovv=ovv-3;
if(Math.abs(offset)&Math.abs(ov))
offset=offset-
//水平从左到右放置
for (int i = 0; i & i++) {
final View child =views.get(i);
final int childWidth = child.getMeasuredWidth();
int childLeft = child.getLeft()+
child.layout(childLeft, 0, childLeft + childWidth, child.getMeasuredHeight());
childLeft += childW
if(mAnimationHandler==null)
mAnimationHandler = new FlipAnimationHandler();
mAnimationHandler.sleep(1);
touchState=TOUCH_STATE_REST;
class FlipAnimationHandler extends Handler {
public void handleMessage(Message msg) {
TouchPageView.this.moveView();
public void sleep(long millis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), millis);
private boolean swapView(int sign)
boolean b=
if(sign==-1)//向左
View view0=views.get(0);
if(view0.getLeft()&=-1*view0.getMeasuredWidth())
swapViewIndex(sign);
View view2=views.get(1);
View view3=views.get(2);
int childWidth=view2.getMeasuredWidth();
int childLeft=view2.getLeft()+childW
view3.layout(childLeft, 0, childLeft + view3.getMeasuredWidth(), view3.getMeasuredHeight());
else if(sign==1)//向右
View view3=views.get(2);
if(view3.getLeft()&view3.getMeasuredWidth())
swapViewIndex(sign);
View view1=views.get(0);
View view2=views.get(1);
int childRight=view2.getLeft();
int childLeft=childRight-view1.getMeasuredWidth();
view1.layout(childLeft, 0, childRight, view1.getMeasuredHeight());
private void swapViewIndex(int sign)
if(sign==-1)//向左
LinearLayout v=views.remove(0);
views.add(v);
else if(sign==1)//向右
LinearLayout v=views.remove(views.size()-1);
views.add(0, v);
阅读(...) 评论()Android开发--滑动侧边栏的实现
在应用开发中,滑动侧边栏经常使用,今天我也试着自己进行了一个简单的实践,虽然功能还不是很强大,但是可以保留下来为以后的开发使用,有需要时在进行简单的修改。实现一个滑动侧边栏思路也很简单:
1.重写一个SlidingMenu类继承ViewGroup,病危该ViewGroup添加两个子布局,分别为菜单和主界面显示;
2.为了得到一个滑动的效果,选择Scroller帮助我们实现,配合ViewGroup下的computeScroll方法实现界面的更新;
3.利用一个boolean来记录菜单是否打开,在菜单打开的状态下向右滑动不会响应,在菜单关闭的情况向左滑动不会响应;
4.为了得到一个良好的交互,我们可以为界面滑动与手指移动的距离定义一个比例,如每次触摸事件发生,界面移动的距离仅为手指移动距离的一半;
下面是两张效果图,界面没怎么布局,大家凑合看
SlidingMenu实现代码:package com.example.
import android.content.C
import android.view.MotionE
import android.view.V
import android.view.ViewG
import android.widget.S
public class SlidingMenu extends ViewGroup {
private static final String TAG = SlidingMenu.class.getName();
private enum Scroll_State {
Scroll_to_Open, Scroll_to_C
private Scroll_S
private int mMostRecentX;
private int downX;
private boolean isOpen =
private View mainV
private Scroller mS
private OnSlidingMenuListener onSlidingMenuL
public SlidingMenu(Context context, View main, View menu) {
super(context);
// TODO Auto-generated constructor stub
setMainView(main);
setMenu(menu);
init(context);
private void init(Context context) {
mScroller = new Scroller(context);
protected void onLayout(boolean arg0, int l, int t, int r, int b) {
// TODO Auto-generated method stub
mainView.layout(l, t, r, b);
menu.layout(-menu.getMeasuredWidth(), t, 0, b);
public void setMainView(View view) {
mainView =
addView(mainView);
public void setMenu(View view) {
addView(menu);
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mainView.measure(widthMeasureSpec, heightMeasureSpec);
menu.measure(widthMeasureSpec - 150, heightMeasureSpec);
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mMostRecentX = (int) event.getX();
downX = (int) event.getX();
case MotionEvent.ACTION_MOVE:
int moveX = (int) event.getX();
int deltaX = mMostRecentX - moveX;
// 如果在菜单打开时向右滑动及菜单关闭时向左滑动不会触发Scroll事件
if ((!isOpen && (downX - moveX)
scrollBy(deltaX / 2, 0);
mMostRecentX = moveX;
case MotionEvent.ACTION_UP:
int upX = (int) event.getX();
int dx = upX - downX;
if (!isOpen) {// 菜单关闭时
// 向右滑动超过menu一半宽度才会打开菜单
if (dx > menu.getMeasuredWidth() / 3) {
state = Scroll_State.Scroll_to_O
state = Scroll_State.Scroll_to_C
} else {// 菜单打开时
// 当按下时的触摸点在menu区域时,只有向左滑动超过menu的一半,才会关闭
// 当按下时的触摸点在main区域时,会立即关闭
if (downX < menu.getMeasuredWidth()) {
if (dx < -menu.getMeasuredWidth() / 3) {
state = Scroll_State.Scroll_to_C
state = Scroll_State.Scroll_to_O
state = Scroll_State.Scroll_to_C
smoothScrollto();
private void smoothScrollto() {
int scrollx = getScrollX();
switch (state) {
case Scroll_to_Close:
mScroller.startScroll(scrollx, 0, -scrollx, 0, 500);
if (onSlidingMenuListener != null && isOpen) {
onSlidingMenuListener.close();
case Scroll_to_Open:
mScroller.startScroll(scrollx, 0,
-scrollx - menu.getMeasuredWidth(), 0, 500);
if (onSlidingMenuListener != null && !isOpen) {
onSlidingMenuListener.close();
public void computeScroll() {
if (puteScrollOffset()) {
scrollTo(mScroller.getCurrX(), 0);
invalidate();
public void open() {
state = Scroll_State.Scroll_to_O
smoothScrollto();
public void close() {
state = Scroll_State.Scroll_to_C
smoothScrollto();
public boolean isOpen() {
return isO
public void setOnSlidingMenuListener(
OnSlidingMenuListener onSlidingMenuListener) {
this.onSlidingMenuListener = onSlidingMenuL
public interface OnSlidingMenuListener {
public void open();
public void close();
在MainActivity中进行调用package com.example.
import android.os.B
import android.support.v4.app.FragmentA
import android.view.LayoutI
import android.view.V
import android.view.View.OnClickL
import android.widget.B
public class MainActivity extends Activity {
private Button openB
private Button closeB
private SlidingMenu mSlidingM
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSlidingMenu = new SlidingMenu(this, LayoutInflater
.from(this).inflate(R.layout.fragment1, null), LayoutInflater
.from(this).inflate(R.layout.fragment2, null));
setContentView(mSlidingMenu);//注意setContentView需要换为我们的SlidingMenu
openButton = (Button) findViewById(R.id.button1);
closeButton = (Button) findViewById(R.id.button_close);
openButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
mSlidingMenu.open();
closeButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
mSlidingMenu.close();
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。手机最左边向右滑会出现一个菜单
现在突然又没有了_z3mini吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:5,462贴子:
手机最左边向右滑会出现一个菜单
现在突然又没有了
我想问的是:它去哪儿了
还有这种情况?
是进了二级菜单才有吧
隐身了。人不应该是插在花瓶里供人观赏的静物,而是蔓延在草原上随风起舞的韵律。生命不是安排,而是追求,人生的意义也许永远没有答案,但也要尽情感受这种没有答案的人生。by 小尾巴。   --来自银河黑z3 compact客户端
内&&容:使用签名档&&
保存至快速回贴
为兴趣而生,贴吧更懂你。&或}

我要回帖

更多关于 android 向右滑动返回 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信