当前位置:  编程技术>移动开发
本页文章导读:
    ▪怎么使用自定义字体        如何使用自定义字体步骤: 1、准备工作:准备好字体文件,如Font.ttf;  得到字体名称,方法是:右键->打开方式->Windows 字体查看器,打开后可以看到字体名称,如“方正兰亭黒简体”(.........
    ▪ 电脑冲冲冲——修炼ARM11:UART        计算机冲冲冲——修炼ARM11:UART  串口又叫UART,通过异步实现(没有时钟,有时钟就是同步)   串口一般为调试位   串口的其中3条线,其功能是:发送、接收、接地线   发送的数据是由开.........
    ▪ 测试单点抚摸及多点触摸API       测试单点触摸及多点触摸API触摸屏是获取用户输入最重要的一种方式。直到Android2.0版本才引入多点触摸。 先测试单点触摸事件,它适用于所有Android版本。我们在视图中注册一个OnTouchListener.........

[1]怎么使用自定义字体
    来源: 互联网  发布时间: 2014-02-18
如何使用自定义字体

步骤:

1、准备工作:准备好字体文件,如Font.ttf;  得到字体名称,方法是:右键->打开方式->Windows 字体查看器,打开后可以看到字体名称,如“方正兰亭黒简体”(举例)。

2、在工程的某个路径,右击鼠标,在弹出的菜单中选择"添加现有项...",选择字体文件。

3、修改字体文件的属性,生成操作 改为 内容,复制到输出目录 改为 如果较新则复制。(Build Action->None;Copy to Output Directoray->Copy if newer)

4、在应用程序资源中添加样式备用,如:

        <!--使用“方正兰亭黒简体”字体的显示少量文本的轻量控件TextBlock-->
        <Style x:Key="TextBlock_FontFamily" TargetType="TextBlock">
            <Setter Property="FontFamily" Value="Fonts/Font.ttf#方正兰亭黒简体"></Setter>
        </Style>

        <!--使用“方正兰亭黒简体”字体的自定义控件Control-->
        <Style x:Key="Control_FontFamily" TargetType="Control">
            <Setter Property="FontFamily" Value="Fonts/Font.ttf#方正兰亭黒简体"></Setter>
        </Style>

5、使用字体:

                        var contentText = new TextBlock { ... };
                        contentText.Style = (Style)Application.Current.Resources["TextBlock_FontFamily_fzlthjw"];

                        myControl.Style = (Style)Application.Current.Resources["Control_FontFamily"];

           或者:

                        <TextBlock ... FontSize="58" FontFamily="Fonts/Font.ttf#方正兰亭黒简体" Height="70" ></TextBlock> 

 

使用时:“路径/字体文件名#指定字体名称”,这里,就不做过多的解释了。


    
[2] 电脑冲冲冲——修炼ARM11:UART
    来源: 互联网  发布时间: 2014-02-18
计算机冲冲冲——修炼ARM11:UART
  串口又叫UART,通过异步实现(没有时钟,有时钟就是同步)
  串口一般为调试位
  串口的其中3条线,其功能是:发送、接收、接地线
  发送的数据是由开始位,数据位,停止位组成。开始停止均为高电平


  PC端先检测发送线是否为低电平,为低电平表示对方要发数据
  等待一段时间,然后开始检测数据,一般检测位的中间


  每一位占据多长时间:波特率(一秒钟之内要传输多少位),为115200
  开始位、数据位、停止位各占多少: 校验位为空,开始位没有设置,默认为1、数据位:8、停止位:1




  把数据写到一个缓冲器里面,硬件会自动发送数据
  读也一样。然后通过读寄存器获取数据


  先初始化串口,设置一些串口的参数,如波特率,数据位,停止位...
  GPA设置为串口的输入输出,设置为0010(专门给UART使用的)GPA0接收,GPA1发送


  设置串口0,这设置ULCON0


  红外模式:正常则设置0
  校验位:不使用,设置为000
  停止位: 0为1个
  数据位:8




  ULCON0 = 0x3 8n1 数据位8 无校验n 停止位1


  UCON0设置
  先设置时钟源,使用PCLK
  回环模式:内部接收和发送连在一起,测试用
  设置发送和接收模式


  可以使用Buffer,因为串口比较慢,最好用缓存区

  UFCON0最后一位使能,则使用

  UMCON0流量控制,先设置为0


  串口波特率配置寄存器UBRDIV0
  PCLK = 66.5MHz

  b = 115200

  UBRDIVO的计算公式:

  Div_val = 66.5 * 10^6 / 115200 /16 - 1 = 35.08 = UBRDIVO + VDIVSLOTO的1个数 / 16 = 35 + 0.8
得1的个数为1



  读数据函数:

  读取UFSTAT0最后三位while(UFSTATO & 0x7f == 0);

  如果RX FIFO为空,等待

  6位为1则缓存器满,
  有数据则读取URXH0,即返回


  写数据函数
  读取while(UFSTATO & (1 << 14)); 如果TX FIFO满,等待
  把数据送到UTXHO

  注意URXHO、UTXHO为unsigned char因为数据位八位


  下面把代码贴出来:

  


    
[3] 测试单点抚摸及多点触摸API
    来源: 互联网  发布时间: 2014-02-18
测试单点触摸及多点触摸API

触摸屏是获取用户输入最重要的一种方式。直到Android2.0版本才引入多点触摸。

先测试单点触摸事件,它适用于所有Android版本。我们在视图中注册一个OnTouchListener接口,并把触摸时间传递给这个接口实现。OnTouchListener接口只有一个方法:public abstract boolean onTouch(View  v, MotionEvent event)

第一个参数是分派该触摸事件的View,第二个参数是获得触摸事件的参数。

OnTouchListener可在任何View中实现中通过View.setOnTouchListener方法进行注册。在MotionEvent被分派给View本身之前会先调用OnTouchListener方法。我们可在onTouch()方法的实现中返回true通知该View,我们已经处理事件。如果返回为false,那么View将自己处理该事件。

MotionEvent实例包含如下3个我们关心的方法:

MotionEvent.getX()和MotionEvent.getY();这两个方法报告触摸事件相对于View的X和Y坐标。坐标原点位于该视图左上角,X轴指向右边,Y轴指向下。坐标是以像素为单位。该方法返回浮点型数据,因此该坐标具有亚像素精度。

MotionEvent.getAction():返回触摸事件的类型。它是一个整型数,具有如下值之一:MotionEvent.ACTION_DOWN、

MotionEvent.ACTION_MOVE、MotionEvent.ACTION_CANCEL和MotionEvent.ACTION_UP。

顾名思义,当手指触摸屏幕时,将触发MotionEvent.ACTION_DOWN事件。

当手指移动时,则触发MotionEvent.ACTION_MOVE事件。只要手指没有完全脱离屏幕,总可以获得MotionEvent.ACTION_MOVE事件

当手指再次离开屏幕时,MotionEvent.ACTION_UP事件就会触发。

MotionEvent.ACTION_CANCEL事件则稍微神秘。文档说明当前手势取消时会触发该事件,我们还是把它假设为MotionEvent.ACTION_UP事件。

下面是测试代码:

package org.example.ch04_android_basics;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;

public class SingleTouchTest extends Activity implements OnTouchListener{
	StringBuilder builder = new StringBuilder();
	TextView textView;

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// TODO Auto-generated method stub
		builder.setLength(0);
		switch(event.getAction()){
		case MotionEvent.ACTION_DOWN:
			builder.append("down, ");
			break;
		case MotionEvent.ACTION_MOVE:
			builder.append("move, ");
			break;
		case MotionEvent.ACTION_CANCEL:
			builder.append("cancle, ");
			break;
		case MotionEvent.ACTION_UP:
			builder.append("up, ");
			break;
		}
		builder.append(event.getX());
		builder.append(", ");
		builder.append(event.getY());
		String text = builder.toString();
		Log.d("TouchTest", text);
		textView.setText(text);
		return true;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		textView = new TextView(this);
		textView.setText("Touch and drag (one finger only)!");
		textView.setOnTouchListener(this);
		setContentView(textView);
	}
	
}

运行效果是显示触发事件以及相应的坐标,如图


对于处理多点触摸事件就复杂的多,Android2.2版本后对多点触摸做了修改,添加了新的方法和常量,甚至重命名了常量。这些改变可能会让处理多点触摸容易些。不过只支持Android2.2以后的版本,为了支持Android2.0--Android2.21版本,我们使用Android2.0的API。

当处理多点触摸事件时,我们使用重载的方法,它们带有一个所谓的指针索引,如event.getX(pointerIndex);

pointIndex是MotionEvent的内部数组中的一个索引,它包含特定手指触摸屏幕事件的坐标值。而真正识别屏幕上的一根手指是指针ID。指针ID是一个任意数字,可以唯一标识触摸屏幕的一个指针的实例。有一个方法MotionEvent.getPointerIdentifier(int pointerIndex),它返回一个基于指针索引的指针ID。只要手指还触摸在屏幕上,一个指针ID就与一根手指保持相同,而指针索引就不一定这样了。先来看看是如何获取指针索引:

int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;

ACTION_POINTER_ID_MASK的常量的值是0xff00,因此低8位为0,高8位为15,用于保存事件的指针索引。

整数的低8位可从event.getAction()方法返回得到,用于保存事件类型的值。我们通过MotionEvent.ACTION_POINTER_ID_SHIFT来移位,该值为8,因此实际上是将第15位移到第8位,第7位移到第0位。注意我们是获取pointerIndex而常量却是XXX_POINTER_ID_XXX而不是XXX_POINTER_INDEX_XXX

获取事件类型,我们只需屏蔽指针索引:

int action = event.getAction() & MotionEvent.ACTION_MASK;

这里我们会遇到新的事件类型,

MotionEvent.ACTION_POINTER_DOWN:除了第一根手指外的任何手指触摸屏幕,都将发生该事件,而第一根手指仍然产生MotionEvent.ACTION_DOWN事件。

MotionEvent.ACTION_POINTER_UP:多根手指触摸屏幕而一根手指离开屏幕时,将发生该事件。最后一根手指离开屏幕将产生MotionEvent.ACTION_UP事件,而该手指不一定是第一个触摸屏幕的手指。为了检查单个MotionEvent中包含几个事件,可使用MotionEvent.getPointerCount()方法,它会告诉我们MotionEvent中包含多少根手指的坐标。然后我们可通过MotionEvent.getX()、

MotionEvent.getY()和MotionEvent.getPointerId()方法来得到指针ID和从指针索引0到MotionEvent.getPointerCount() - 1的坐标值。

测试代码如下:

package org.example.ch04_android_basics;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;

public class MultiTouchTest extends Activity implements OnTouchListener {
	StringBuilder builder = new StringBuilder();
	TextView textView;
	float[] x = new float[10];
	float[] y = new float[10];
	boolean[] touched = new boolean[10];
	int[] id = new int[10];
	
	private void updateTextView(){
		builder.setLength(0);
		for(int i = 0; i < 10; i++){
			builder.append(touched[i]);
			builder.append(", ");
			builder.append(id[i]);
			builder.append(", ");
			builder.append(x[i]);
			builder.append(", ");
			builder.append(y[i]);
			builder.append("\n");
		}
		textView.setText(builder);
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		textView = new TextView(this);
		textView.setText("Touch and drag (multiple fingers supported)!");
		textView.setOnTouchListener(this);
		setContentView(textView);
		for(int i = 0; i < 10; i++){
			id[i] = -1;
		}
		updateTextView();
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// TODO Auto-generated method stub
		int action = event.getAction() & MotionEvent.ACTION_MASK;
		int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >>
			MotionEvent.ACTION_POINTER_ID_SHIFT;
		int pointerCount = event.getPointerCount();
		for(int i = 0; i < 10; i++){
			if(i >= pointerCount){
				touched[i] = false;
				id[i] = -1;
				continue;
			}
			if(event.getAction() != MotionEvent.ACTION_MOVE && i != pointerIndex){
				/* If it's an up/down/cancel/out event, mask the id to see if 
				we should process it for this touch point */
				continue;
			}
			int pointerId = event.getPointerId(i);
			switch(action){
			case MotionEvent.ACTION_DOWN:
			case MotionEvent.ACTION_POINTER_DOWN:
				touched[i] = true;
				id[i] = pointerId;
				x[i] = (int)event.getX(i);
				y[i] = (int)event.getY(i);
				break;
			case MotionEvent.ACTION_UP:
			case MotionEvent.ACTION_POINTER_UP:
			case MotionEvent.ACTION_OUTSIDE:
			case MotionEvent.ACTION_CANCEL:
				touched[i] = false;
				id[i] = -1;
				x[i] = (int)event.getX(i);
				y[i] = (int)event.getY(i);
				break;
			case MotionEvent.ACTION_MOVE:
				touched[i] = true;
				id[i] = pointerId;
				x[i] = (int)event.getX(i);
				y[i] = (int)event.getY(i);
				break;
			}
		}
		updateTextView();
		return true;
	}

}

运行效果:

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3