`

Android学习07-----事件处理(4)键盘事件和触摸事件

阅读更多

七、键盘事件

Main.xml

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

	<TextView 
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:text="请输入EMAIL地址:" />
	
	<EditText
		android:id="@+id/input"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:selectAllOnFocus="true" />
	
	<ImageView
		android:id="@+id/img"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:src="@drawable/wrong"/>

</LinearLayout>

 

Activity:

package com.iflytek.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.ImageView;

public class EventActivity extends Activity {

	private EditText input = null;
	private ImageView img = null;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		this.input = (EditText) super.findViewById(R.id.input); // 取得组件
		this.img = (ImageView) super.findViewById(R.id.img); // 取得组件
		this.input.setOnKeyListener(new OnKeyListenerImpl());
	}

	private class OnKeyListenerImpl implements OnKeyListener {

		public boolean onKey(View v, int keyCode, KeyEvent event) {
			switch (event.getAction()) {
			case KeyEvent.ACTION_UP:
				String msg = EventActivity.this.input.getText().toString(); // 取得输入的文字信息
				if (msg.matches("\\w+@\\w+\\.\\w+")) { // 验证通过
					EventActivity.this.img.setImageResource(R.drawable.right); // 设置正确图片
				} else {
					EventActivity.this.img.setImageResource(R.drawable.wrong); // 设置错误图片
				}
			case KeyEvent.ACTION_DOWN: // 键盘按下
				break;
			}
			return false;
		}
	}
}

 

 

八、触摸事件

Demo01_ 获取坐标 :

Main.xml

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

	<TextView 
		android:id="@+id/info"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent"/>
</LinearLayout>

Activity:

package com.iflytek.activity;

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 EventActivity extends Activity {
	
	private TextView info = null;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
    	this.info = (TextView) super.findViewById(R.id.info);
		this.info.setOnTouchListener(new OnTouchListenerImpl());
    }
    
	private class OnTouchListenerImpl implements OnTouchListener {

		public boolean onTouch(View v, MotionEvent event) {
			EventActivity.this.info.setText("X = " + event.getX() + ",Y = "
					+ event.getY()); // 设置文本
			return false;
		}
	}
}

 

Demo02_ 绘图:

Main.xml

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

	<com.iflytek.activity.MyPaintView
		android:id="@+id/paintView"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent"/>

</LinearLayout>

Activity:

package com.iflytek.activity;

import android.app.Activity;
import android.os.Bundle;

public class EventActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

 

MyPaintView.java:

package com.iflytek.activity;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

/**
 * @author xdwang
 * 
 * @create 2012-9-3 下午9:46:43
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description
 * 
 */
public class MyPaintView extends View {
	private List<Point> allPoint = new ArrayList<Point>(); // 保存所有的操作坐标

	public MyPaintView(Context context, AttributeSet attrs) { // 接收Context,同时接收属性集合
		super(context, attrs); // 调用父类的构造
		super.setOnTouchListener(new OnTouchListenerImpl());
	}

	private class OnTouchListenerImpl implements OnTouchListener {
		public boolean onTouch(View v, MotionEvent event) {
			Point p = new Point((int) event.getX(), (int) event.getY()); // 将坐标保存在Point类
			if (event.getAction() == MotionEvent.ACTION_DOWN) { // 按下,表示重新开始保存点
				MyPaintView.this.allPoint = new ArrayList<Point>(); // 重绘
				MyPaintView.this.allPoint.add(p); // 保存点
			} else if (event.getAction() == MotionEvent.ACTION_UP) { // 用户松开
				MyPaintView.this.allPoint.add(p); // 记录坐标点
				MyPaintView.this.postInvalidate(); // 重绘图形
			} else if (event.getAction() == MotionEvent.ACTION_MOVE) { // 用户移动
				MyPaintView.this.allPoint.add(p); // 记录坐标点
				MyPaintView.this.postInvalidate(); // 重绘图形
			}
			return true; // 表示下面的操作不再执行了。
		}
	}

	@Override
	protected void onDraw(Canvas canvas) { // 进行绘图
		Paint p = new Paint(); // 依靠此类开始画线
		p.setColor(Color.RED);// 定义图的颜色
		if (MyPaintView.this.allPoint.size() > 1) { // 现在有坐标点保存的时候可以开始进行绘图
			Iterator<Point> iter = MyPaintView.this.allPoint.iterator();
			Point first = null;
			Point last = null;
			while (iter.hasNext()) {
				if (first == null) {
					first = (Point) iter.next(); // 取出坐标
				} else {
					if (last != null) { // 前一阶段已经完成了
						first = last; // 重新开始下一阶段
					}
					last = (Point) iter.next(); // 结束点坐标
					canvas.drawLine(first.x, first.y, last.x, last.y, p);
				}
			}
		}
	}

}

 

分享到:
评论

相关推荐

    Android键盘事件处理例子

    本文将深入探讨Android键盘事件处理,并通过一个实际的案例来讲解相关知识点。 首先,Android中的键盘事件主要分为两种:软键盘(Software Keyboard)事件和硬件键盘(Hardware Keyboard)事件。软键盘通常在触摸屏...

    Android应用程序输入事件处理机制

    在Android应用程序中,有一类...这个PPT讲Android应用程序输入事件的分发和处理过程,主要涉及到输入管理InputManager、输入事件监控线程InputReader、输入事件分发线程InputDispatcher,以及应用程序主线程消息循环。

    Android-keyboard-dismisser一个实现点击任何键盘外的部分来取消键盘的Android库

    `init(this)`指定了当前Activity作为上下文,`withRootView(findViewById(android.R.id.content))`设置了监听触摸事件的根视图,`withDismissingAction(KeyboardDismisser.ON_TOUCH_OUTSIDE)`定义了触发键盘关闭的...

    Android-shijian-chuli.zip_android

    1. **事件监听器(Event Listeners)**:Android中的事件处理基于监听器模式,通过实现特定的接口(如OnClickListener、OnTouchListener等)来捕获和处理用户的交互事件。这些接口定义了处理各种事件的方法,如...

    android处理键盘事件之物理按键(屏蔽后退键)

    在Android开发中,处理键盘事件是一项重要的任务,特别是在设计用户交互界面时。本文将深入探讨如何处理物理按键事件,特别是如何屏蔽系统自带的后退键。Android设备通常配备多个物理按键,包括返回键,这对于应用的...

    Android高级应用源码-自定义键盘.rar

    "Android高级应用源码-自定义键盘.rar"是一个包含自定义键盘实现的源代码压缩包,适合Android开发者深入学习和参考。这个资源提供了从头构建自定义键盘的实践经验,对于提升Android应用的用户体验具有重要意义。 ...

    Android-NumberKeyboard自定义数字键盘

    通过阅读源码,我们可以学习如何实现自定义键盘的具体细节,例如如何创建和管理按钮状态,如何处理按键事件,以及如何与应用中的输入框进行通信等。 总之,“Android-NumberKeyboard自定义数字键盘”是一个实用的...

    Android-development-sample---IMF.rar_Android softKeyboard_androi

    IMF是Android系统中处理用户输入的关键组件,它允许应用程序接收来自不同输入设备(如物理键盘、触摸屏键盘等)的输入。在这个样本项目中,开发者将学习到如何利用Android SDK中的工具和API来创建一个功能完整的软...

    Android-DigitalKeyboard简单的仿微信数字键盘

    在Android开发中,有时我们需要创建特定的用户界面来提升用户体验,比如模仿知名应用的功能,例如微信的数字...通过学习这个项目,开发者不仅可以掌握自定义控件的创建,还能深入理解Android界面设计和事件处理机制。

    android详细解释键盘和鼠标事件.pdf

    Android 键盘和鼠标事件详解 Android 事件机制是现代用户界面的核心组件之一,它基于事件驱动的方式来实现人机交互。...通过对触摸屏事件和按键事件的处理,可以实现复杂的用户交互逻辑,提高应用程序的用户体验。

    Android事件处理机制详解及源码

    在Android系统中,事件处理主要包括触摸事件、键盘事件、广播事件等,这些事件的处理方式直接影响到应用的用户体验和功能实现。下面我们将深入探讨Android事件处理机制的原理及其源码分析。 首先,Android事件处理...

    Android-android自定义键盘在页面嵌入的。使用还算简单

    总的来说,创建一个自定义键盘在Android中虽然需要一定的工作量,但通过理解触摸事件处理、输入连接和视图布局机制,开发者可以灵活地构建符合特定需求的输入方案。"MoveKeyboard-master"项目提供了一个很好的起点,...

    android事件处理

    Android事件处理系统允许应用程序响应用户的触摸、键盘输入、网络变化等各种事件。本篇将详细解析Android事件处理机制,特别是基于给定的"android 事件处理demo",我们将深入探讨如何在实际应用中处理触摸事件。 ...

    Android-input-system-analysis.rar_Android input system_android

    在Android操作系统中,输入系统(Input System)是一个至关重要的组件,它负责处理各种用户交互,如触摸屏操作、物理按键事件、手势等。本资源"Android-input-system-analysis.rar"提供了对Android输入系统的深入...

    Android推箱子说明支持键盘和触摸屏操作.rar

    - 对于触摸屏操作,Android提供了GestureDetector和MotionEvent类来捕获和处理用户的触摸事件,实现滑动、点击等交互。 - 支持键盘操作,需要监听硬件键盘或软键盘的按键事件。Android中的`KeyEvent`类用于处理...

    android 纯自定义数字键盘输入

    总之,"android 纯自定义数字键盘输入"项目是一个实用的学习资源,它涵盖了Android自定义View的开发、触摸事件处理、界面布局设计等多个知识点。通过研究这个`KeyDemo`,开发者不仅可以学会如何创建自定义键盘,还能...

    Android键盘

    优化键盘性能包括减少布局复杂性,避免过度绘制,以及合理处理触摸事件。同时,考虑不同屏幕尺寸和方向的适配,确保键盘在各种设备上都能良好工作。 总结,Android键盘的自定义能力为开发者提供了丰富的可能性,...

    基于Android平台的事件处理

    这些事件可以通过监听器的方式进行捕获和处理。例如,触摸事件可以使用`OnTouchListener`接口来监听,而键盘事件则可以使用`OnKeyListener`接口。开发者还可以通过`Intent`对象来发送和接收消息,实现组件间的通信。...

    android 自定义软键盘or系统键盘源码

    通过阅读这些源码,开发者可以了解到Android系统键盘如何处理触摸事件,如何进行文本预测和纠错,以及如何与应用进行通信等细节。 `SoftKeyboard.rar`和`keydemo.zip`可能包含了一些示例代码或已完成的自定义键盘...

Global site tag (gtag.js) - Google Analytics