我要一步一步往上爬——Android应用实例笔记(1)
源程序来自APIDemo的GestureBuilder
Gesture
A gesture is a hand-drawn shape on a touch screen. It can have one or multiple strokes.
Each stroke is a sequence of timed points.
A user-defined gesture can be recognized by a GestureLibrary and a built-in alphabet gesture can be recognized by a LetterRecognizer.
- 一个手势就是一个在触摸屏幕的手写形状。它可以有一个或者多个笔画。每个笔画是由一些列的时序点构成。
一个用户自定义的手势可以被GestureLibrary 识别,或者字母手势可以被内置的字符识别器( LetterRecognizer)识别
GestureLibrary
用于添加存储获取Getsture的管理容器。通常由GestureLibraries的如下4个方法来获得,
GestureOverLayView
GestureOverLayView,一个用于输入的透明层,它可以放到任何widget层上或者任何包含其他widget组件,即在最上层。
GestureOverLayView可以添加手势识别监听器:如下面
GestureOverlayView overlay = (GestureOverlayView) findViewById(R.id.gestures_overlay);
//添加手势识别监听器。
overlay.addOnGestureListener(new GesturesProcessor());
GestureOverlayView.OnGestureListener
用于监听手势,需要实现onGesture,onGestureEnded这两个方法
源程序注释:
public class CreateGestureActivity extends Activity {
private static final float LENGTH_THRESHOLD = 120.0f;
private Gesture mGesture;
private View mDoneButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create_gesture);
mDoneButton = findViewById(R.id.done);
//GestureOverLayView,一个用于输入的透明层,它可以放到任何widget层上或者任何包含其他widget组件。
GestureOverlayView overlay = (GestureOverlayView) findViewById(R.id.gestures_overlay);
//添加手势识别监听器。
overlay.addOnGestureListener(new GesturesProcessor());
}
//用来检索存储每个对象实例化当前状态,在Activity被kill掉之前前被调用,可以被onCreate(Bundle) 或者 onRestoreInstanceState(Bundle) 调用恢复对象状态。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mGesture != null) {
outState.putParcelable("gesture", mGesture);
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//恢复上一次手势
mGesture = savedInstanceState.getParcelable("gesture");
if (mGesture != null) {
final GestureOverlayView overlay =
(GestureOverlayView) findViewById(R.id.gestures_overlay);
overlay.post(new Runnable() {
public void run() {
overlay.setGesture(mGesture);
}
});
mDoneButton.setEnabled(true);
}
}
//添加手势
@SuppressWarnings({"UnusedDeclaration"})
public void addGesture(View v) {
if (mGesture != null) {
final TextView input = (TextView) findViewById(R.id.gesture_name);
final CharSequence name = input.getText();
if (name.length() == 0) {
input.setError(getString(R.string.error_missing_name));
return;
}
//GestureLibraries.fromFile(mStoreFile);GestureLibraries可以有多种方式构造GestureLibrary
//fromPrivateFile (Context context, String name)
//fromRawResource (Context context, int resourceId)
//A gesture is a hand-drawn shape on a touch screen. It can have one or multiple strokes. Each stroke is a sequence of timed points. A user-defined gesture can be recognized by a GestureLibrary.
//一个手势是手在触摸屏上划动形成的轨迹,它可以有一个或多个曲线,每个曲线是一按时间序列的点。GestureLibrary可以识别用户定义的手势
final GestureLibrary store = GestureBuilderActivity.getStore();
store.addGesture(name.toString(), mGesture);//将手势添加到自定义的手势库中,并保存
store.save();
setResult(RESULT_OK);
final String path = new File(Environment.getExternalStorageDirectory(),
"gestures").getAbsolutePath();
Toast.makeText(this, getString(R.string.save_success, path), Toast.LENGTH_LONG).show();
} else {
setResult(RESULT_CANCELED);
}
finish();
}
@SuppressWarnings({"UnusedDeclaration"})
public void cancelGesture(View v) {
setResult(RESULT_CANCELED);
finish();
}
//监听Gesture事件监听器,类似的还有OnGesturePerformedListener
//GestureOverlayView.OnGesturingListener,这个处理手势刚开始,和结束事件
private class GesturesProcessor implements GestureOverlayView.OnGestureListener {
public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
mDoneButton.setEnabled(false);
mGesture = null;
}
@Override
public void onGesture(GestureOverlayView overlay, MotionEvent event) {
}
@Override
public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
mGesture = overlay.getGesture();
//这里过滤比较短的笔画或者曲线
if (mGesture.getLength() < LENGTH_THRESHOLD) {
overlay.clear(false);
}
//获得所有笔画
List<GestureStroke> strokes= mGesture.getStrokes();
for(GestureStroke stroke:strokes){
OrientedBoundingBox orientedBoundingBox=stroke.computeOrientedBoundingBox();
Path path = stroke.getPath();
path.setFillType(FillType.INVERSE_EVEN_ODD);//填充方式为奇偶填充。这个可以参见填充方式
for(float p:stroke.points){
System.out.print(p+' ');
}
}
mDoneButton.setEnabled(true);
}
public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
}
}
}
分享到:
相关推荐
《单片机通信技术应用实例——基于STC15W系列单片机》是一本深入探讨单片机通信技术的实践教程,由周长锁和王旭两位专家编写。本书聚焦于STC15W系列单片机,该系列是STC公司推出的一款高性能、低功耗的8051内核...
这个“安卓Android源码——多点触控实例源码.zip”压缩包包含了一个具体的多点触控应用的源代码,可以帮助开发者深入理解如何在Android应用中实现这一特性。 首先,我们需要了解多点触控的基本概念。多点触控...
总的来说,这个实例源码提供了一个实现Android多点触控功能的基础框架,可以帮助开发者深入理解多点触控的原理,并且能够自定义手势操作,为Android应用增加更多交互性。通过阅读和分析源代码,你可以了解到如何处理...
第7章 良好的学习开端——Android基本组件介绍之我的美丽我做主——Android中应用界面布局 第7章 良好的学习开端——Android基本组件介绍之不积跬步无以至千里——常用widget组件介绍 第7章 良好的学习开端——...
在安卓(Android)平台上,手势检测是开发过程中一个重要的组成部分,它使得用户可以通过触摸屏幕的各种动作来与应用程序进行交互。这个“安卓Android源码——手势检测.zip”文件可能包含了一个示例项目,用于演示...
总结来说,PathEffect是Android图形绘制的重要工具,它可以给Path添加各种视觉效果,通过实例源码学习,我们可以深入理解其工作原理和应用场景,从而在UI设计上实现更多创新。对于Android开发者来说,掌握PathEffect...
"安卓Android源码——触屏手势识别GestureTest.zip"是一个专注于手势识别的项目,它帮助开发者深入理解如何在Android应用中实现对用户触摸屏幕行为的智能解析。 在Android系统中,触屏手势识别是通过`...
本教程将深入探讨如何在Android应用中实现手势滑动,并提供一个源码实例——TestFlip。 一、Android手势识别基础 Android系统提供了GestureDetector类来处理基本的手势,如单击、双击、长按等。同时,...
新闻发布系统——数据库设计实例
本资源"安卓Android源码——android 自定义对话框.zip"包含了实现自定义对话框的源代码,这对于理解和实践Android应用的界面定制具有重要意义。 首先,我们要理解Android系统提供的默认对话框类`AlertDialog`和`...
在Android开发领域,Android Studio是官方推荐的集成开发环境(IDE),它为开发者提供了高效、便捷的工具来创建和管理Android应用。这篇学习笔记将引导新手入门,通过创建第一个简单的案例来了解Android Studio的...
在Android开发中,触屏手势识别是用户交互的重要组成部分,它允许用户通过各种手势与应用程序进行互动,提高用户体验。这个名为"Android源码——触屏手势识别GestureTest.zip"的压缩包显然包含了与实现这一功能相关...
【标题】"安卓Android源码——项目实例 商业项目源代码.zip" 提供的是一个具体的Android应用程序的源代码,这通常意味着它是一个实际运行的商业级应用,用于教学或者参考。这样的项目实例对于开发者来说非常有价值,...
这份名为“安卓笔记——安卓详细笔记汇总”的资源,无疑是安卓开发者或者学习者的重要参考资料。以下将对这个压缩包中可能包含的知识点进行深入解析。 首先,Android系统是基于Linux内核的开源操作系统,广泛应用于...
这份名为"安卓Android源码——(触屏手势识别).rar"的压缩包文件,显然是一个关于如何在Android平台上实现触屏手势识别的源代码示例。下面,我们将深入探讨触屏手势识别的概念、原理以及在Android中的实现方法。 一...
本压缩包“Android源码——输入法手势程序源码.zip”包含了一个实现手势输入功能的Android应用源代码,以及可能的示例图片资源。下面我们将深入探讨相关的Android开发知识点。 首先,我们要理解Android输入法的工作...
这份“安卓Android源码——手势滑动源码(适合新手)”的压缩包提供了针对新手的教程和实例,帮助开发者理解和实践如何在Android应用中实现手势滑动功能。 首先,我们来了解一下Android手势识别的基础知识。Android...
本资源"安卓Android源码——项目实例商业项目源代码.zip"提供了一个实际的商业项目源代码,对于学习Android开发者来说,这是一个宝贵的实践机会,能够深入理解Android系统的运行机制以及应用程序的构建过程。...
这个压缩包文件"Android源码——数据库SQLite.zip"可能包含了关于Android中SQLite数据库的源码分析、使用示例以及相关的图像资源,如1-120912223R80-L.png,可能用于解释或展示SQLite在Android中的工作原理。...
本书共分21章,内容讲解上深入浅出,实例紧贴开发需求。在技术理论的讲解方面,《Android应用开发完全自学手册:核心技术、传感器、2D/3D、多媒体与典型案例》注重对实际动手能力和完全自学的指导,书中重点讲解了...