Android应用事件处理

一. 实验目的
1.掌握内部类作为事件监听器的事件处理
2.掌握外部类作为事件监听器的事件处理
3.掌握基于回调的事件处理
二. 实验内容
1.内部类作为事件监听器。设计一个APP,界面包含一个EditText和一个Button。用户点击按钮后,EditText显示bn按钮被单击了,要求:使用匿名内部类的实例作为事件监听器,显示如下图所示。
Android应用事件处理
文章图片

2.外部类作为事件监听器。创建一个项目,界面中包含2个EditText和1个按钮,用户点击按钮时显示提示信息:短信发送完成,可参考下图所示。要求:使用外部类作为监听器。
Android应用事件处理
文章图片

3.通过回调实现跟随手指的小球,绘制小球类名为:DrawView,小球半径15,画笔颜色为红色,通过重写onTouchEvent事件实现,布局文件为main.xml,如下图所示。
Android应用事件处理
文章图片

三、实验步骤
(1) 建立项目,在xml文件中布局,我采用的是默认的相对布局,将自动生成的Textview组件删除,添加EditText组件和Button组件就可以了,其中布局EditText组件,需要四行代码,分别是设置id属性名称为show,设置文本框的宽度和手机界面一样宽,设置文本框的高度为恰好可以包裹文字,设置文本框为不可编辑型。布局Button组件,主要是设置文本框id属性名为button1,设置宽和高是包住文字的大小,设置按钮文本名称为单击按钮,其余代码是位置代码,可以直接在设计视图拖动按钮,代码自动生成。
(2) 在.java文件中设置事件监听器,监听按钮,首先需要做的是绑定文本框id,然后绑定按钮id,设置监听器监听按钮,最后在监听结果文本框显示。
(3)在模拟器上运行。
XML布局代码如下,你只需要添加EditText组件和Button组件及其属性就可以了,其他的代码用你系统自动生成的。


.java文件中的事件代码如下:主要就是三步,绑定文本框id和绑定按钮id,设置监听器监听按钮,最后在监听结果文本框显示。这个是通过匿名内部类实现的。
注意:如果代码有标红,把鼠标放到标红位置按下快捷键alt+enter,会软件提供解决问题的方法。
public class MainActivity extends ActionBarActivity {@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditTextshow = (EditText) findViewById(R.id.show) ; //绑定文本框id属性 Button button = (Button) findViewById(R.id.button1) ; //绑定按钮id属性 button.setOnClickListener(new View.OnClickListener() { //为按钮设置匿名内部监听器 @Override public void onClick(View view) { show.setText("按钮被点击了!") ; //按钮被点击后在文本框显示 } }); } }

演示效果如图所示:
Android应用事件处理
文章图片

(1)首先有在XML布局,我采用的是系统默认的相对布局,只需要将TextView组件删除,在其中增加两个EditText组件和一个按钮组件就可以了。
(2) 在MainActivity.java文件中绑定按钮和文本框的id属性,使用匿名外部监听器监听事件,在java文件夹下创建一个名为Send的activity,在其中设置获取短信号码和获取短信内容的代码,获取短信管理器,发送文本短信,然后提示短信发送成功。
(3)在模拟中运行。
XML布局的代码如下:我使用的是默认的相对布局,你只需要使用其中的两个EditText组件和一个按钮组件及其相关属性的代码就可以了,其余代码直接用系统自动生成的。都是常见的
属性,其中有个hint属性,是用来设置文本提示信息的。

MainActivity.java中的代码如下:
import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends ActionBarActivity {@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditTextaddress = (EditText) findViewById(R.id.show1) ; //绑定第一个文本框id属性 final EditTextcontent = (EditText) findViewById(R.id.show2) ; //绑定第二个文本框id属性 Button button = (Button) findViewById(R.id.button1) ; //绑定按钮id属性 //使用匿名外部类监听事件 button.setOnClickListener(new Send(this,address, content)); } }

Send.java文件中的代码如下:此文件是在java文件夹下创建的activity,用来设置外部监听方法的。
import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.telephony.SmsManager; import android.view.View; import android.widget.EditText; import android.widget.Toast; //author WangGuodong public class Send implements View.OnClickListener { private Activity act ; private EditText address ; private EditText content ; public Send(Activity act, EditText address,EditText content ){ //带三个参数的构造方法 this.act = act ; this.address = address ; this.content = content ; } @Override public void onClick(View view) { String s1 = address.getText().toString() ; //获取地址信息,也就是输入的文本框的手机号码 String s2 = content.getText().toString() ; //获取短信内容信息 SmsManager s3 = SmsManager.getDefault() ; //获取短信管理器 PendingIntent s4 = PendingIntent.getBroadcast(act, 0, new Intent(), 0) ; //创建发送短信的PendingInten s3.sendTextMessage(s1,null,s2,s4,null); //发送文本短信 Toast.makeText(act,"短信成功发送", Toast.LENGTH_LONG).show() ; } }

模拟器演示结果如下:
Android应用事件处理
文章图片

(1)第一步,就是自定义一个View子类,实现小球的效果,小球的移动原理是通过onTouchEvent回调,实时返回手指触碰屏幕的位置,赋值给小球的位置坐标,并通知onDraw重绘。
(2)第二步是引用自定义的View,引用的方法就是将自定义View的完整路径+类名作为一个组件,写入XML中。
(3)第三步在MainActivity.java中设置最基本的引入布局文件。
(4)模拟器运行。
XML布局代码:
注意:其中我的自定义组件View的完整路径+类名为 你的要根据你自己的路径和类名去引用。

【Android应用事件处理】DrawView.java中绘制小球和重绘小球的代码:
注意:DrawView.java是在java文件夹下创建的名为DrawView的activity。
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class DrawView extends View{ public float currentX = 40; public float currentY = 50; // 定义、创建画笔 Paint p = new Paint(); public DrawView(Context context, AttributeSet set) { super(context, set); } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); // 设置画笔的颜色 p.setColor(Color.RED); // 绘制一个小圆(作为小球) canvas.drawCircle(currentX, currentY, 15, p); } @Override public boolean onTouchEvent(MotionEvent event) { // 当前组件的currentX、currentY两个属性 this.currentX = event.getX(); this.currentY = event.getY(); // 通知改组件重绘 this.invalidate(); // 返回true表明处理方法已经处理该事件 return true; }}

MainActivity.java中设置最基本的引入布局文件的代码:
import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends ActionBarActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}

模拟器运行效果如下:
因为是动态效果,就是红色圆点跟随鼠标触碰的位,截图为静态,看不到很好的效果。
Android应用事件处理
文章图片

本文原创,author WangGuodong,创作不易,如果对你有帮助,点个赞再走吧,谢谢!

    推荐阅读