一. 实验目的
1.掌握内部类作为事件监听器的事件处理
2.掌握外部类作为事件监听器的事件处理
3.掌握基于回调的事件处理
二. 实验内容
1.内部类作为事件监听器。设计一个APP,界面包含一个EditText和一个Button。用户点击按钮后,EditText显示bn按钮被单击了,要求:使用匿名内部类的实例作为事件监听器,显示如下图所示。
.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 EditText show = (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("按钮被点击了!") ; //按钮被点击后在文本框显示
}
});
}
}
演示效果如图所示:
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 EditText address = (EditText) findViewById(R.id.show1) ;//绑定第一个文本框id属性
final EditText content = (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() ;
}
}
模拟器演示结果如下:
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);
}
}
模拟器运行效果如下:
因为是动态效果,就是红色圆点跟随鼠标触碰的位,截图为静态,看不到很好的效果。
本文原创,author WangGuodong,创作不易,如果对你有帮助,点个赞再走吧,谢谢!
作者:nuist__NJUPT