Android学习笔记(三)---手势识别、style和theme、传感器的使用

手势识别

第一步:建立手势库

使用SDK自带例子GestureBuilder建立手势库(位置:android-sdk-windows\samples\android-8\GestureBuilder)。使用GestureBuilder之前,你需要恢复其到开发环境,然后进行编绎并部署到手机上。此时,就可以使用GestureBuilder建立手势库,生成的手势库文件在SCDard上,默认文件名称为:gestures

 

第二步:在应用中加载手势库文件,然后开发手势识别代码。

把手势库文件gestures文件拷贝到项目的res/raw目录下。然后在布局文件中添加用于手势绘制的View:

 <android.gesture.GestureOverlayView

    android:id="@+id/gestures"

    android:layout_width="fill_parent“ android:layout_height="0dip"

    android:layout_weight="1.0" />

为View添加手势监听事件:gestureOverlayView.addOnGesturePerformedListener();

得到手势库:

mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);

加载手势库:

mLibrary.load();

List<Prediction> predictions = mLibrary.recognize(gesture);

//从手势库中查询匹配的内容,匹配的结果可能包括多个相似的结果,匹配度高的结果放在最前面

大多数情况下,手势都是通过一笔完成。然而有一些特别的需求就需要通过多个笔画来实现,这时可以使用gestureStrokeType属性进行设置:android:gestureStrokeType="multiple"

 

android样式和主题(style&theme)

android中的样式和CSS样式作用相似,都是用于为界面元素定义显示风格,它是一个包含一个或者多个view控件属性的集合。如:需要定义字体的颜色和大小。

在CSS中是这样定义的:

<style>

    .itcast{COLOR:#0000CC;font-size:18px;}

</style>

可以像这样使用上面的css样式:<div class="itcast">传智播客</div>

在Android中可以这样定义样式:

在res/values/styles.xml文件中添加以下内容

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <style name=“itcast”> <!-- 为样式定义一个全局唯一的名字-->

        <item name=“android:textSize”>18px</item> 

<!-- name属性的值为使用了该样式的View控件的属性 -->

        <item name="android:textColor">#0000CC</item>

    </style>

</resources>

在layout文件中可以像下面这样使用上面的android样式:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ....>

    <TextView style="@style/itcast"

        .....  />

</LinearLayout>

<style>元素中有一个parent属性。这个属性可以让当前样式继承一个父样式,并且具有父样式的值。当然,如果父样式的值不符合你的需求,你也可以对它进行修改,如下:

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <style name="itcast">

        <item name="android:textSize">18px</item> 

<!-- name属性为样式要用在的View控件持有的属性 -->

        <item name="android:textColor">#0000CC</item>

    </style>

    <style name="subitcast" parent="@style/itcast">

        <item name="android:textColor">#FF0000</item>

    </style>

</resources>

 

android中主题也是用于为应用定义显示风格,它的定义和样式的定义相同,如下:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<style name=“itcastTheme">

<item name=“android:windowNoTitle”>true</item> <!-- 没标题 -->

<item name=“android:windowFullscreen”>?android:windowNoTitle</item> <!-- 全屏显示 -->

</style>

</resources>

上面“?android:windowNoTitle”中的问号用于引用在当前主题中定义过的资源的值。下面代码显示在AndroidManifest.xml中如何为应用设置上面定义的主题:

<application android:icon="@drawable/icon" android:label="@string/app_name"

     android:theme="@style/itcastTheme">

   ......

</application>

除了可以在AndroidManifest.xml中设置主题,同样也可以在代码中设置主题,如下:

setTheme(R.style.itcastTheme);

尽管在定义上,样式和主题基本相同,但是它们使用的地方不同。样式用在单独的View,如:EditText、TextView等;主题通过AndroidManifest.xml中的<application>和<activity>用在整个应用或者某个 Activity,主题对整个应用或某个Activity进行全局性影响。如果一个应用使用了主题,同时应用下的view也使用了样式,那么当主题和样式属性发生冲突时,样式的优先级高于主题。

另外android系统也定义了一些主题,例如:<activity android:theme=“@android:style/Theme.Dialog”>,该主题可以让Activity看起来像一个对话框,还有透明主题:@android:style/Theme.Translucent 。如果需要查阅这些主题,可以在文档的referenceàandroid-->R.style 中查看。

 

传感器的使用

传感器类型:方向、加速度(重力)、光线、磁场、距离(临近性)、温度等。 

方向传感器:   Sensor.TYPE_ORIENTATION

加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER

光线传感器:    Sensor.TYPE_LIGHT

磁场传感器:   Sensor.TYPE_MAGNETIC_FIELD

距离(临近性)传感器: Sensor.TYPE_PROXIMITY

温度传感器:   Sensor.TYPE_TEMPERATURE

//获取某种类型的感应器

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

//注册监听,获取传感器变化值

sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);

上面第三个参数为采样率:最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个建议,不保证特定的采样率可用。

最快: SensorManager.SENSOR_DELAY_FASTEST

最低延迟,一般不是特别敏感的处理不推荐使用,该种模式可能造成手机电力大量消耗,由于传递的为原始数据,算法不处理好将会影响游戏逻辑和UI的性能。

游戏: SensorManager.SENSOR_DELAY_GAME

游戏延迟,一般绝大多数的实时性较高的游戏都使用该级别。

普通: SensorManager.SENSOR_DELAY_NORMAL 

标准延迟,对于一般的益智类或EASY级别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧现象。

用户界面: SensorManager.SENSOR_DELAY_UI

一般对于屏幕方向自动旋转使用,相对节省电能和逻辑处理,一般游戏开发中我们不使用。

你可能感兴趣的:(android,xml,传感器,应用程序,手势识别)