android三种方法实现监听事件

Android实现监听事件的四种方式(匿名内部内实现,外部类实现,接口实现,绑定到标签)

1. 使用匿名内部类的方式实现监听事件

使用方法:

  1. 首先为要实现监听的对象绑定监听器,例如为一个Button对象绑定一个监听器botton.setOnClickListener();
  2. 然后在setOnClickListener()方法中定义一个OnClickListener的匿名内部类,然后重写内部类中的onClick方法。
  3. 最后在onClick方法中实现监听事件要实现的逻辑即可。

优点有:

1.可以在当前类中复用该监听器类

   2.可以自由访问外部类的所有界面组件

b1.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intet = new Intent(MainActivity.this,seekbar.class);
				startActivity(intet);
				//finish();
			}
			
		});


2. 使用外部类的方式实现监听事件

使用方法:

  1. 首先要自定义一个外部类,实现OnClickListener接口,并重写onClick方法,在onClick方法中可以定义这个外部类想实现的处理逻辑,那么调用这个外部类实现监听事件时,都可以用super来调用这个类中的处理逻辑。这也是使用外部类实现监听事件的优势所在:可以将不同监听事件中大量重复的处理逻辑定义在这个类中,然后使用这个外部类实现监听事件时都可以使用super关键字来直接调用,而不用重复定义,减少重复代码,提高代码质量。
  2. 为要实现监听的对象绑定监听器,然后在setOnClickListener()方法中使用我们自定义的外部类来实现监听事件。
  3. 重写onClick方法,并根据需要来决定是否需要使用super调用父类处理逻辑,并在onClick方法中定义自己的处理逻辑。

比较少见,其中优点为:

1.当某个事件监听器被多个GUI界面共享,且主要是完成某种业务逻辑的实现

其中确定为:

1.不利于提高程序的内聚性

2.不能自由访问创建GUI界面类的组件,编程不够简洁

这个类很简单,实现OnClickListener并复写onClick方法即可,外部类监听点击事件实际中用的不多,但如果以后做到好几十个按钮点下

去要产生相同的动画效果,就可以把动画效果放到外部内里面

Button buttonup=(Button)findViewById(R.id.btn_signup);
buttonin.setOnClickListener(new MyOnClicklistener() {
    public void onClick(View v) {
            //noinspection ConstantConditions
                super.onClick(v);
                Toast.makeText(MainActivity.this,"点击了登录",Toast.LENGTH_LONG).show();
 
 
            }
        });
 
buttonup.setOnClickListener(new MyOnClicklistener() {
    public void onClick(View v) {
                //noinspection ConstantConditions
                super.onClick(v);
          Toast.makeText(MainActivity.this,"点击了注册",Toast.LENGTH_LONG).show();
            }
        });
 
class MyOnClicklistener implements View.OnClickListener {
        public void onClick(View v) {
            //让所有使用当前外部类的点击事件的按钮都要做出一个动作,改变button本身
            v.setAlpha(0.5f);
        }


3. 使用接口方式实现监听事件

可以直接在Activity中定义事件处理方法

其中优点为:非常简洁

缺点为:

1.这种形式可能造成程序结构混乱。Activity的主要职责应该是完成界面初始化;但此时还需包含事件处理器方法,从而引起混乱

2.如果activity界面类需要实现监听器接口,让人感觉比较怪异

public class ActivityListener extends Activity implements OnClickListener {
	private EditText show;
	private Button bn;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		show = (EditText)findViewById(R.id.show);
		bn = (Button)findViewById(R.id.bn);
		bn.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		show.setText("按钮被单击了!");
	}


4.直接绑定到标签

在布局中要发送事件源中定义一个:

android:onClick="clickHandler"

然后在该布局对应的Activity定义一个 void clickHandler(void source)方法



  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中,拍照事件监听主要分为两部分: 1. 相机预览和拍照设置 2. 拍照事件监听 以下是一个简单的实现示例: ```java public class CameraActivity extends AppCompatActivity implements SurfaceHolder.Callback { private Camera mCamera; private SurfaceView mSurfaceView; private SurfaceHolder mSurfaceHolder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_camera); mSurfaceView = findViewById(R.id.surface_view); mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.addCallback(this); } @Override public void surfaceCreated(SurfaceHolder holder) { try { mCamera = Camera.open(); mCamera.setPreviewDisplay(holder); mCamera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { if (mSurfaceHolder.getSurface() == null) { return; } try { mCamera.stopPreview(); } catch (Exception e) { e.printStackTrace(); } try { mCamera.setPreviewDisplay(mSurfaceHolder); mCamera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); mCamera.release(); mCamera = null; } public void takePicture(View view) { mCamera.takePicture(null, null, mPictureCallback); } private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { // 处理拍照后的数据 } }; } ``` 在上面的示例中,我们使用 `Camera` 类开启相机预览,并在 `SurfaceView` 上进行显示。当需要拍照时,调用 `takePicture()` 方法即可触发拍照事件。 拍照事件监听通过 `Camera.PictureCallback` 接口实现,可以在 `onPictureTaken()` 方法中处理拍照后的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值