`

右侧MENU划屏代码

阅读更多
参考http://my.eoe.cn/1188496/archive/20296.html

MainActivity

package com.nico;

import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnPreDrawListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;

public class MainActivity extends Activity implements
		GestureDetector.OnGestureListener, OnTouchListener {

	public LinearLayout leftview = null;
	public LinearLayout rightview = null;
	public ImageView setBtn = null;
	public GestureDetector gestureD = null;
	public int window_width;
	public int max_width;
	public boolean isScroll = false;
	public int mScrollX = 0;
	public ImageView img = null;
	final public static int SPEED = 30;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		initView();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@SuppressWarnings("deprecation")
	public void initView() {
		leftview = (LinearLayout) findViewById(R.id.left_part);
		rightview = (LinearLayout) findViewById(R.id.right_part);
		setBtn = (ImageView) findViewById(R.id.set_btn);
		img = (ImageView) findViewById(R.id.bg);
		gestureD = new GestureDetector(this);
		leftview.setOnTouchListener(this);
		img.setOnTouchListener(this);
		gestureD.setIsLongpressEnabled(false);
		getmaxWidth();
	}

	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		return false;
	}

	@Override
	public void onLongPress(MotionEvent e) {

	}

	@Override
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		//拖动过程中
		isScroll = true;
		//distanceX是处理后点X跟前点X的距离,此时mScrollX为X方向移动距离
		mScrollX += distanceX;
		
		RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) leftview
				.getLayoutParams();
		int leftmargin = params.leftMargin;
		//左边距 - X方向移动的距离 等于新的左边距
		leftmargin -= mScrollX;

		//到头了,停止移动,设定左边距为-max_width 或 0
		if (leftmargin <= -max_width) {
			leftmargin = -max_width;
			params.leftMargin = leftmargin;
			isScroll = false;
		} else if (leftmargin >= 0) {
			leftmargin = 0;
			params.leftMargin = leftmargin;
			isScroll = false;
		}
		//其他范围内,正常设定左边距
		params.leftMargin = leftmargin;
		leftview.setLayoutParams(params);
		//返回false,继续传递这个事件
		return false;
	}

	@Override
	public void onShowPress(MotionEvent e) {

	}

	@Override
	public boolean onSingleTapUp(MotionEvent e) {
		//单击的时候实现左右移动
		isScroll = false;
		RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) leftview
				.getLayoutParams();
		int leftmargin = params.leftMargin;
		if (leftmargin == 0) {
			new MoveAsyTask(leftview, max_width).execute(-SPEED);
		} else {
			new MoveAsyTask(leftview, max_width).execute(SPEED);
		}

		return false;
	}

	@Override
	public boolean onDown(MotionEvent e) {
		//按下第一个动作时,mScrollX置为0,isScroll重置为false
		mScrollX = 0;
		isScroll = false;
		return true;
	}

	public boolean hasMeasured = false;

	void getmaxWidth() {
		ViewTreeObserver viewTreeObserver = leftview.getViewTreeObserver();
		// 获取控件宽度
		viewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() {
			@Override
			public boolean onPreDraw() {
				if (!hasMeasured) {
					window_width = getWindowManager().getDefaultDisplay()
							.getWidth();
					RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) leftview
							.getLayoutParams();
					layoutParams.width = window_width;
					leftview.setLayoutParams(layoutParams);
					max_width = rightview.getWidth();
					hasMeasured = true;
				}
				return true;
			}
		});

	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		if (MotionEvent.ACTION_UP == event.getAction() && isScroll == true) {
			RelativeLayout.LayoutParams params = (LayoutParams) leftview
					.getLayoutParams();
			int leftmargin = params.leftMargin;
			
			//滑动结束后,判断拖动距离是否大于一般屏宽,是则向前,否则缩回去
			if (leftmargin < -window_width / 2) {
				new MoveAsyTask(leftview, max_width).execute(-SPEED);
			} else {
				new MoveAsyTask(leftview, max_width).execute(SPEED);
			}
		}
		return gestureD.onTouchEvent(event);
	}
}



划屏任务
package com.nico;

import android.os.AsyncTask;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

public class MoveAsyTask extends AsyncTask<Integer, Integer, String> {
	public LinearLayout view;

	public int max_width;

	public MoveAsyTask(LinearLayout v, int mw) {
		view = v;
		max_width = mw;
	}

	@Override
	protected void onProgressUpdate(Integer... values) {
		RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view
				.getLayoutParams();
		//更新视图
		int leftmargin = params.leftMargin;
		int guide = values[0];
		if (guide > 0) {
			// 往右
			leftmargin = Math.min(leftmargin + guide, 0);
		} else {
			leftmargin = Math.max(leftmargin + guide, -max_width);
			// 往左
		}
		params.leftMargin = leftmargin;
		view.setLayoutParams(params);
	}

	@Override
	protected String doInBackground(Integer... params) {

		int times = 0;
		if (max_width % Math.abs(params[0]) == 0)// 整除
			times = max_width / Math.abs(params[0]);
		else
			times = max_width / Math.abs(params[0]) + 1;// 有余数

		for (int i = 0; i < times; i++) {
			publishProgress(params[0]);
			try {
				Thread.sleep(Math.abs(params[0]));
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		return null;
	}
}



XML文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:id="@+id/right_part"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginLeft="50dp"
        android:background="@android:color/background_dark"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/right_title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="设置"
                android:textColor="@android:color/white"
                android:textSize="20sp" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/left_part"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <RelativeLayout
            android:id="@+id/left_title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/nav_bg" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="我"
                android:textColor="@android:color/white"
                android:textSize="20sp" />

            <ImageView
                android:id="@+id/set_btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:src="@drawable/set_btn" />
        </RelativeLayout>

        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/bg"
            android:background="@drawable/guide_bg" />
    </LinearLayout>

</RelativeLayout>
分享到:
评论

相关推荐

    Android 源代码,Menu的代码

    一个Android系统中的Menu代码,初学者可参考:  menu.findItem(EXIT_ID);找到特定的MenuItem  MenuItem.setIcon.可以设置menu按钮的背景  点击第一个menu的第一个按钮执行的动作  点击第二个个menu的第一个...

    VC代码 menu_button_src (实用代码源)

    VC代码 menu_button_src (实用代码源)VC代码 menu_button_src (实用代码源)VC代码 menu_button_src (实用代码源)VC代码 menu_button_src (实用代码源)VC代码 menu_button_src (实用代码源)VC代码 menu_button_src ...

    HookMenu源代码vb

    【HookMenu源代码】是一个关于Windows程序开发中的技术主题,主要涉及到Windows API钩子(Hook)机制和菜单操作的实现。在VB(Visual Basic)环境下,开发者可以通过钩子技术来拦截和处理系统或应用程序的特定事件,...

    Android 源代码,Menu的代码.zip

    Android 源代码,Menu的代码是一个Android系统中的Menu代码,初学者可参考: menu.findItem(EXIT_ID);找到特定的MenuItem MenuItem.setIcon.可以设置menu按钮的背景 点击第一个menu的第一个按钮执行的动作 点击...

    jQuery导航图片全屏滚动代码.zip

    menu: '#menu', // 导航菜单的选择器 sectionsColor: ['#fff', '#f00'], // 每个section的背景颜色 navigation: true, // 是否显示导航条 scrollingSpeed: 700 // 滚动速度 }); }); ``` 对于响应式导航下拉...

    PHP 网站头部menu的经典代码(pdf)

    ### PHP 网站头部Menu的经典代码解析 #### 一、概述 本篇文章将深入解析一个经典的PHP网站头部Menu代码,这段代码不仅适用于网站导航栏的设计与实现,还能够为开发者提供用户认证与退出功能的基础架构。通过分析这...

    element 中 el-menu 组件的无限极循环思路代码详解

    以上就是关于 element 中 el-menu 组件实现无限极循环菜单的思路和代码的详细解析,对于使用 Element UI 开发 Web 应用的前端开发者而言,掌握这一技术点对提升应用的用户体验和交互流畅性有着十分重要的意义。

    vb HookMenu控件源代码

    VB HookMenu控件源代码是Visual Basic编程中用于创建自定义菜单操作的一种技术。HookMenu控件允许开发者在系统级或应用程序级捕获并修改菜单事件,为用户提供更丰富的交互体验。这种技术主要通过Windows API函数来...

    VC 动态menu 源代码

    本资源“VC 动态menu 源代码”提供了两个工程实例,帮助开发者更好地理解和实现这一功能。 在Windows应用程序中,菜单是用户与程序交互的主要方式之一,它们包含了各种操作选项。在静态菜单中,这些选项在程序编译...

    proto.menu关键代码

    ### Proto.menu关键代码解析 #### 一、概览 本文将深入分析一段使用`Proto.menu`库实现右键菜单功能的关键代码。通过本篇内容,读者可以了解到如何使用`dtree`来创建一个具备基本功能的右键菜单,并对代码中的各个...

    Android代码-DropDownMenu

    DropDownMenu DropDownMenu for Android,filter the list based on multiple condition. To get this project into your build Step 1. Add the specific repository to your build file: repositories { maven {...

    横导航菜单menu的实例 js代码

    在网页设计中,横导航菜单(Horizontal Navigation Menu)是一种常见的用户界面元素,它通常位于页面顶部,用于引导用户浏览网站的不同部分。这种菜单设计既美观又实用,因为它们有效地利用了横向空间,使得用户能够...

    安卓menu代码(仿QQtab优化界面)

    在这个“安卓menu代码(仿QQtab优化界面)”项目中,我们将探讨如何利用 `Menu` 创建类似QQ应用的底部导航栏,以实现更加优雅且高效的用户界面。 首先,我们来看 `Menu` 的创建。在 Android 应用中,通常在 `...

    Android代码-DropdownMenu

    DropdownMenu View 基于 ListView 和 PopupWindow 实现的下拉菜单,可以方便的配置样式和填充数据。 (work in process: 本项目为学习使用,不保证使用稳定性,请慎重使用。) 使用 Layout 代码: Java 代码...

    Android 创建菜单Menu

    在Android应用开发中,Menu是用户界面的重要组成部分,它提供了在屏幕顶部或底部显示一系列操作选项的功能。Android菜单主要用于在不占用屏幕空间的情况下提供多种功能选择。本篇将深入探讨如何在Android中创建和...

    DropDownMenu下拉菜单改进版

    《DropDownMenu下拉菜单改进版:打造优雅的代码体验》 在软件开发中,用户界面的设计与交互至关重要,其中下拉菜单(DropDownMenu)作为常见的交互元素,被广泛应用于各种应用和网页中。一个设计得当且易于使用的...

    单片机菜单架构源码_单片机_Menu_菜单_

    在给定的资源中,我们看到几个关键的源代码文件,如`Menu.c`, `Menu_If.c`, `Menu_Page.c`以及它们对应的头文件`.h`,这些文件构成了菜单系统的核心部分。 `Menu.c`很可能包含了菜单系统的主函数和全局变量,它初始...

    基于DHTML+AJAX实现的 Menu类库scripts代码例子

    本篇将深入探讨基于DHTML+AJAX实现的Menu类库scripts代码实例,这一技术主要用于构建动态、交互式的网页菜单系统。DHTML(Dynamic HTML)是一种结合了HTML、CSS、JavaScript以及DOM(Document Object Model)的技术...

    DropDownMenu下拉菜单

    `library`目录可能是包含DropDownMenu相关组件的库代码,而`app`目录则是应用的主要代码所在。 总的来说,使用DropDownMenu可以实现代码的简洁优雅,提高应用的易用性。开发者需要理解其工作原理,熟练掌握配置和...

Global site tag (gtag.js) - Google Analytics