当前位置:文档之家› Android侦测滑动手势方法

Android侦测滑动手势方法

Android侦测滑动手势方法
Android侦测滑动手势方法

Android滑动手势侦测方法介绍

时间:2010-12-01 09:05 来源:https://www.doczj.com/doc/a47788211.html, 收藏复制分享共有评论(0)条在Android手机操作系统中支持各种滑动手势的操作。我们在这里为大家介绍的方法主要就是针对这些手势如何能在Android平台中侦测出来。下面就让我们大家一起来看看Android滑动手势具体的识别方法吧。

Android Activity跳转相关操作技巧分享

Android创建sdcard详细图解

Android系统信息查看方法详解

Android数据库相关代码解读

Android拍照实现方式概述

Android SDK提供了一个listener类来侦测各种不同的手势:

SimpleOnGestureListener. 你只需要实现自己所关心的手势就可以了.

Swipe在android里面是叫Fling

首先创建自己的一个手势detector类:

class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { }一个Android滑动手势有几个特征, 比如是在x或者y轴上近乎直线的划动, 中途路径的偏差不能太大, 而且划动需要一定的速度, 所以我们定义几个定量:

private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_MAX_OFF_PATH = 250; private static final int SWIPE_THRESHOLD_VELOCITY = 200;

然后在onFling方法中, 判断是不是一个合理的swipe动作:

if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideLeftIn); viewFlipper.setOutAnimation(slideLeftOut); viewFlipper.showNext(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideRightIn); viewFlipper.setOutAnimation(slideRightOut); viewFlipper.showPrevious(); } if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideLeftIn); viewFlipper.setOutAnimation(slideLeftOut); viewFlipper.showNext(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideRightIn); viewFlipper.setOutAnimation(slideRightOut); viewFlipper.showPrevious(); }这里的viewFlipper是含有多个view的一个container, 可以很方便的调用prev/next view, 加上animation动画, 可以达到一些不错的效果:

viewFlipper = (ViewFlipper)findViewById(R.id.flipper); slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);

自定义的animation可以查看具体的XML, 比如从左边进来的一个动画:

< set xmlns:android="https://www.doczj.com/doc/a47788211.html,/apk/res/android"> < translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="800"/> < /set>

当然最后不要忘记在你的Activity中override onTouch方法来获取手势action: @Override public boolean onTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return true; else return false; }

Android滑动手势的相关识别方法就为大家介绍到这里。

Android滑动手势侦测方法介绍

时间:2010-12-01 09:05 来源:https://www.doczj.com/doc/a47788211.html, 收藏复制分享共有评论(0)条在Android手机操作系统中支持各种滑动手势的操作。我们在这里为大家介绍的方法主要就是针对这些手势如何能在Android平台中侦测出来。下面就让我们大家一起来看看Android滑动手势具体的识别方法吧。

Android Activity跳转相关操作技巧分享

Android创建sdcard详细图解

Android系统信息查看方法详解

Android数据库相关代码解读

Android拍照实现方式概述

Android SDK提供了一个listener类来侦测各种不同的手势:

SimpleOnGestureListener. 你只需要实现自己所关心的手势就可以了.

Swipe在android里面是叫Fling

首先创建自己的一个手势detector类:

class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { }一个Android滑动手势有几个特征, 比如是在x或者y轴上近乎直线的划动, 中途路径

的偏差不能太大, 而且划动需要一定的速度, 所以我们定义几个定量:

private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_MAX_OFF_PATH = 250; private static final int SWIPE_THRESHOLD_VELOCITY = 200;

然后在onFling方法中, 判断是不是一个合理的swipe动作:

if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideLeftIn); viewFlipper.setOutAnimation(slideLeftOut); viewFlipper.showNext(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideRightIn); viewFlipper.setOutAnimation(slideRightOut); viewFlipper.showPrevious(); } if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideLeftIn); viewFlipper.setOutAnimation(slideLeftOut); viewFlipper.showNext(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideRightIn); viewFlipper.setOutAnimation(slideRightOut); viewFlipper.showPrevious(); }这里的viewFlipper是含有多个view的一个container, 可以很方便的调用prev/next view, 加上animation动画, 可以达到一些不错的效果:

viewFlipper = (ViewFlipper)findViewById(R.id.flipper); slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); slideRightIn =

AnimationUtils.loadAnimation(this, R.anim.slide_right_in); slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);

自定义的animation可以查看具体的XML, 比如从左边进来的一个动画:

< set xmlns:android="https://www.doczj.com/doc/a47788211.html,/apk/res/android"> < translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="800"/> < /set>当然最后不要忘记在你的Activity中override onTouch方法来获取手势action: @Override public boolean onTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return true; else return false; }

Android滑动手势的相关识别方法就为大家介绍到这里。

android滑动分页

实现原理

通过手指的滑动,判断数据大小

然后动态改变数据

底部的加载是一个view

import android.app.ListActivity;

import android.os.Bundle;

import android.os.Handler;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AbsListView;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ProgressBar;

import android.widget.TextView;

import android.widget.AbsListView.OnScrollListener;

import https://www.doczj.com/doc/a47788211.html,youtParams;

public class Test extends ListActivity implements OnScrollListener {

Aleph0 adapter = new Aleph0();

int lastItem = 0;

int mProgressStatus = 0;

private Handler mHandler = new Handler();

ProgressBar progressBar;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

LinearLayout searchLayout = new LinearLayout(this);

searchLayout.setOrientation(LinearLayout.HORIZONTAL);

progressBar = new ProgressBar(this);

progressBar.setPadding(0, 0, 15, 0);

searchLayout.addView(progressBar,new https://www.doczj.com/doc/a47788211.html,youtParams(

https://www.doczj.com/doc/a47788211.html,youtParams.WRAP_CONTENT,

https://www.doczj.com/doc/a47788211.html,youtParams.WRAP_CONTENT

));

TextView textView = new TextView(this);

textView.setText("加载中...");

textView.setGravity(Gravity.CENTER_VERTICAL);

searchLayout.addView(textView,new https://www.doczj.com/doc/a47788211.html,youtParams(

https://www.doczj.com/doc/a47788211.html,youtParams.FILL_PARENT,

https://www.doczj.com/doc/a47788211.html,youtParams.FILL_PARENT

));

searchLayout.setGravity(Gravity.CENTER);

LinearLayout loadingLayout = new LinearLayout(this);

loadingLayout.addView(searchLayout,new https://www.doczj.com/doc/a47788211.html,youtParams(

https://www.doczj.com/doc/a47788211.html,youtParams.WRAP_CONTENT,

https://www.doczj.com/doc/a47788211.html,youtParams.WRAP_CONTENT

));

loadingLayout.setGravity(Gravity.CENTER);

getListView().addFooterView(loadingLayout);

// Start lengthy operation in a background thread

// new Thread(new Runnable() {

// public void run() {

// while (mProgressStatus < 100) {

//

// // Update the progress bar

// mHandler.post(new Runnable() {

// public void run() {

// progressBar.setProgress(mProgressStatus);

// }

// });

// }

// }

// }).start();

registerForContextMenu(getListView());

setListAdapter(adapter);

getListView().setOnScrollListener(this);

}

public void onScroll(AbsListView v, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

lastItem = firstVisibleItem + visibleItemCount - 1 ;

System.out.println("lastItem:" + lastItem);

}

public void onScrollStateChanged(AbsListView v, int state) {

if(lastItem == adapter.count && state == OnScrollListener.SCROLL_STATE_IDLE){ adapter.count += 10;

adapter.notifyDataSetChanged();

}

// if(state == OnScrollListener.SCROLL_STATE_IDLE ) {

// adapter.count += 10;

// adapter.notifyDataSetChanged();

// }

}

class Aleph0 extends BaseAdapter {

int count = 10;

public int getCount() { return count; }

public Object getItem(int pos) { return pos; }

public long getItemId(int pos) { return pos; }

public View getView(int pos, View v, ViewGroup p) {

TextView view = new TextView(Test.this);

view.setText("entry " + pos);

view.setHeight(90);

return view;

}

}

}

Android 滑动加载数据package com.ScrollListView;

import Android.app.ListActivity;

import Android.os.Bundle;

import Android.view.Gravity;

import Android.view.View;

import Android.view.ViewGroup

import

import

import

import

import

import

public class EndLessActivity extends ListActivity implements OnScrollListener {

Aleph0 adapter = new Aleph0();

int mProgressStatus = 0 ;

ProgressBar progressBar;

protected void onCreate(Bundle savedInstanceState) {

super .onCreate(savedInstanceState);

LinearLayout searchLayout = new LinearLayout( this );

searchLayout.setOrientation(LinearLayout.HORIZONTAL);

progressBar = new ProgressBar( this );

progressBar.setPadding( 0 , 0 , 15 , 0 );

searchLayout.addView(progressBar, new https://www.doczj.com/doc/a47788211.html,youtParams(

https://www.doczj.com/doc/a47788211.html,youtParams.WRAP_CONTENT,

https://www.doczj.com/doc/a47788211.html,youtParams.WRAP_CONTENT

));

TextView textView = new TextView( this );

textView.setText( " 加载中... " );

textView.setGravity(Gravity.CENTER_VERTICAL);

searchLayout.addView(textView, new https://www.doczj.com/doc/a47788211.html,youtParams(

https://www.doczj.com/doc/a47788211.html,youtParams.FILL_PARENT,

https://www.doczj.com/doc/a47788211.html,youtParams.FILL_PARENT

));

searchLayout.setGravity(Gravity.CENTER);

LinearLayout loadingLayout = new LinearLayout( this );

loadingLayout.addView(searchLayout, new https://www.doczj.com/doc/a47788211.html,youtParams(

https://www.doczj.com/doc/a47788211.html,youtParams.WRAP_CONTENT,

https://www.doczj.com/doc/a47788211.html,youtParams.WRAP_CONTENT

));

loadingLayout.setGravity(Gravity.CENTER);

getListView().addFooterView(loadingLayout);

setListAdapter(adapter);

getListView().setOnScrollListener( this );

}

public void onScroll(AbsListView view,

int firstVisible, int visibleCount, int totalCount) {

boolean loadMore = /* maybe add a padding */

firstVisible + visibleCount >= totalCount;

if (loadMore) {

adapter.count += visibleCount; // or any other amount

adapter.notifyDataSetChanged();

}

}

public void onScrollStateChanged(AbsListView v, int s) { }

class Aleph0 extends BaseAdapter {

int count = 40 ; /* starting amount */

public int getCount() { return count; }

public Object getItem( int pos) { return pos; }

public long getItemId( int pos) { return pos; }

public View getView( int pos, View v, ViewGroup p) {

TextView view = new TextView(EndLessActivity. this );

view.setText( " entry " + pos);

return view;

}

}

}

listview下部是按钮控制:

package com.ScrollListView;

import Android.app.ListActivity;

import Android.os.Bundle;

import Android.view.Gravity;

import Android.view.View;

import Android.view.ViewGroup;

import Android.widget.AbsListView;

import Android.widget.BaseAdapter;

import Android.widget.Button;

import Android.widget.LinearLayout;

import Android.widget.ProgressBar;

import Android.widget.TextView;

import Android.widget.AbsListView.OnScrollListener;

public class EndLessActivity extends ListActivity {

Aleph0 adapter = new Aleph0();

int mProgressStatus = 0 ;

protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState);

LinearLayout searchLayout = new LinearLayout( this );

searchLayout.setOrientation(LinearLayout.HORIZONTAL);

Button textView = new Button( this );

textView.setText( " 加载中... " );

textView.setGravity(Gravity.CENTER_VERTICAL);

searchLayout.addView(textView, new https://www.doczj.com/doc/a47788211.html,youtParams(

https://www.doczj.com/doc/a47788211.html,youtParams.FILL_PARENT,

https://www.doczj.com/doc/a47788211.html,youtParams.FILL_PARENT

));

searchLayout.setGravity(Gravity.CENTER);

LinearLayout loadingLayout = new LinearLayout( this );

loadingLayout.addView(searchLayout, new https://www.doczj.com/doc/a47788211.html,youtParams(

https://www.doczj.com/doc/a47788211.html,youtParams.WRAP_CONTENT,

https://www.doczj.com/doc/a47788211.html,youtParams.WRAP_CONTENT

));

loadingLayout.setGravity(Gravity.CENTER);

getListView().addFooterView(loadingLayout);

textView.setOnClickListener( new Button.OnClickListener()

{ @Override

public void onClick(View v)

{

adapter.count += 10 ;

adapter.notifyDataSetChanged();

}

});

setListAdapter(adapter);

// getListView().setOnScrollListener(this);

}

/* public void onScroll(AbsListView view,

int firstVisible, int visibleCount, int totalCount) {

boolean loadMore =

firstVisible + visibleCount >= totalCount;

if(loadMore) {

adapter.count += visibleCount;

adapter.notifyDataSetChanged();

}

} */

public void onScrollStateChanged(AbsListView v, int s) { }

class Aleph0 extends BaseAdapter {

int count = 40 ; /* starting amount */

public int getCount() { return count; }

public Object getItem( int pos) { return pos; }

public long getItemId( int pos) { return pos; }

public View getView( int pos, View v, ViewGroup p) {

TextView view = new TextView(EndLessActivity. this );

view.setText( " entry " + pos);

return view;

}

}

}

Android项目文档

课程代号:83308113 2014-2015学年第1学期《ISAS与项目训练(一)》 项目:Android 班级:网络2班 学号: 13734214 姓名:刘雨亭. 指导教师:温一军周洪斌 . 沙洲职业工学院 NIIT安艾艾迪

目录 一、系统简介 (3) 二、发展历程 (3) 三、发行版本 (4) 四、国内外手机应用状况 (4) 五、发展趋势 (5) 六、Android的相关技术介绍及分析 (6) 6.1、Android系统架构研究 (6) 6.2、应用程序框架 (7) 6.3、类库 (8) 七、Android的API (10) 八、Android活动的生命周期 (11)

一、系统简介 Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号,于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender 公司专门制作的称之为“Droid ”的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。 二、发展历程 2003年10月,Andy Rubin等人创建Android公司,并组建Android团队。 2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为Google公司工程部副总裁,继续负责Android项目。 2007年11月5日,谷歌公司正式向外界展示了这款名为Android的操作系统,并且在这天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成,并与84家硬件制造商、软件开发

安卓锁屏密码忘了6种解决方法总结

安卓锁屏密码忘了6种解决方法总结 第一种方法:用别人的手机打你的电话,然后手机就会进入系统,再进设置里去掉自动锁屏。当提示输入gmail密码的时候填写:“null”(补充说明,适用部分机子,跟ROM关系也很大,成功率不保证) ========================= 第二种方法:恢复出厂值,(前提是刷了recovery!) 操作步骤如下: 1.关闭手机 2.按“HOME“+开机键进入RECOVERY 3.进入WIPE选项 4.选择恢复出厂值wipe data/factory res 5.重启手机 ========================= 第三种方法:电脑端连接卓大师,(前提是你的手机开启了USB调试),等安装好驱动,打开卓大师工具箱,里面有清除锁屏密码选项,进去等待重启 ========================= 第四种方法:重新刷机(你可以只刷入Recovery,然后使用第二种方法,或者干脆整个系统重刷) ========================= 第五种方法:手机重启过程中按音量键加或者音量键和开机键不放(一些国产安卓适用)进去想办法清除锁屏密码,可以用卓大师清除 ========================= 第六种方法:教大家用ADB来删除密码: 1.手机连接电脑,在充电模式下进行。 2.下载ADB.rar解压到C盘根目录。

3.点击电脑开始>运行>输入cmd>再就进cmd 依次输入命令: 01.cd c:\adb 02.adb shell 03.cd data/system 04.ls 可以看到有一个pass*.key和一个gesture.key的文件,这个就是密码的文件,我们就是把这个给删除就可以了! 最后输入命令: rm pass*.key(如果是PIN解锁就这个) 或者rm gesture.key(如果是手势解锁就这个) 输入reboot或手动重启手机生效。(其实,不用重启也可以的了,直接解锁,密码怎么滑都对,最好还是重启一下.)

Android简单的登陆界面的设计开发

通信实训报告 -Android移动平台开发 学院:信息工程学院 班级: 学号: 姓名:

实训内容: 一.1.Andriod的简介 Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android 2.4 Gingerbread 和Android 3.0 Honeycomb。 Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。 Android早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营,它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张,在智能MP4方面也有较大发展。采用Android系统主要厂商包括台湾的HTC,(第一台谷歌的手机G1由HTC生产代工)美国摩托罗拉,SE等,中国大陆厂商如:魅族(M9),华为、中兴、联想、蓝魔等。 2.Android构架图 二.1软件下载 Android SDK,网址是https://www.doczj.com/doc/a47788211.html,. JDK的下载地址https://www.doczj.com/doc/a47788211.html,/javase/downloads/widget/jdk6.jsp。Eclipse的下载网址是https://www.doczj.com/doc/a47788211.html,/downloads/ 2.Android开发环境搭建

安卓手机忘了锁屏4招教你找回-利客修

今天心血来潮换了一个锁屏密码,结果一个午觉睡起来,完全想!不!起!密码了!不过好在身边有很多专业的优秀的手机维修师傅,随便请教了一下。安卓手机忘记解锁密码后找回的方法有很多呢!快来看看维修师傅都传授了什么小技巧吧! 1、用别人的手机给自己打个电话 自己的手机进不去了,电话还是可以接的,挂掉电话后,手机就会进入系统界面,然后你就可以打开【设置】去掉自动锁屏。 当提示输入gmail密码的时候填写:“null” 注意:这只适用部分机子,跟ROM关系也很大,成功率不保证! 但起码手机能进的去了! 2、恢复出厂值 前提是你要刷了recovery! ①关闭手机; ②按“HOME”+开机键进入RECOVERY; ③进入WIPE选项(这里我们以华为做示范); 在Recovery模式下,利用音量上下键选择“Wipe Data/Factory Reset",然后按“电源键” 进行确认操作。 ④重启手机。清除操作完成后,利用音量上下选择“Reboot System now”(现在重启手机)项,并按“电源键”进行确定。接着手机就会自动重启,进入桌面,锁屏密码破解成功。 3、利用第三方工具清除密码 当你的手机完成root并开启usb调试后,连接电脑上的【卓大师】或者【刷机精灵】等第三方手机管理软件,使用其中的【清除锁屏密码功能】。

如果想获取root权限,直接手机应用商店里搜索下载【一键root】之类的app就可以了。 4、用ADB来删除密码 ①手机连接电脑,进入充电模式。 ②下载ADB.rar解压到C盘根目录。 ③点击电脑开始>运行>输入cmd> 进cmd依次输入命令: 01.cd c:adb 02.adb shell 03.cd data/system 04.ls 然后就会出现这个。 找到那个password.key的文件,这个就是密码的文件,我们把这个给删除就可以了! 最后输入命令: rm pass*.key(如果是PIN解锁就这个) 或者rmgesture.key(如果是手势解锁就这个) 输入reboot或手动重启手机生效。 (不用重启也可以的,直接解锁,密码怎么滑都对,但最好还是重启一下哦~)

第4章 Android用户界面设计

视图组件的使用模式 常用组件 高级组件 提示框与警告对话框

就是Android应用程序的开发过程。一般过程是先通过XML布局文件或Java代码创建界面布局,设定组件显示样式,随后获取UI组件对象,并处理组件事件响应。 视图组件的定义 资源的访问 生成视图组件资源标识 视图组件的引用 视图组件的事件响应 组件的常用属性

1.1视图组件的定义 使用XML布局文件定义视图组件 使用Java代码定义视图组件(不推荐)

1.1视图组件的定义 使用XML布局文件定义视图组件 Android平台为大多数视图组件以及其子类提供了XML标记,可通过XML布局文件中的标记来定义视图组件。XML中的每个元素代表了一个组件,即元素名称对应相应的Java类。

1.1视图组件的定义

相关文档 最新文档