android的点击事件,android的点击事件分发

Android源码追踪—android:onClick

之前对源码的阅读,总是用时一通乱七八糟的跳转,以学会使用为目的;过了一段时间,就忘记了,因此打算将一些源码的阅读经历记录下来,也通过敲一遍的过程,加深理解。

在绥中等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、成都网站制作、成都外贸网站建设 网站设计制作按需求定制网站,公司网站建设,企业网站建设,成都品牌网站建设,全网整合营销推广,外贸网站制作,绥中网站建设费用合理。

最开始,用一个比较简单的例子来小试牛刀吧

对于View(Button、TextView等)的点击事件,常用的写法是通过 findViewById 获取View的实例,然后通过 setOnClickListener 设置监听事件,比如我们有如下Button控件。

设置点击事件(假设在Activity中)

但是还有一种写法是在xml布局中通过android:onClick属性直接指定点击执行的函数。

【思考】

首先我们知道诸如 android:xxx 之类的属性是会在某个attrs文件中定义的,此处的 android:onClick 是View的属性,定义在如下文件中。

在View的构造函数中,会解析出此属性的值。

看这里, 如果变量handlerName不为空,就会为此View设置点击事件了 ,这个handlerName就是onClick属性的值doSubmit,但这个点击事件,并不是我们所熟悉的OnClickListener。

进一步看看这个 DeclaredOnClickListener 类

DeclaredOnClickListener 实现了 OnClickListener ,其中重点是参数 mResolvedMethod 和 mResolvedContext 。

在onClick事件中最终通过反射 mResolvedMethod.invoke(mResolvedContext, v); 执行了doSubmit方法。

doSubmit的访问权限是否可以设置为private呢?

答案:不可以,因为源码中没有调用 mMethod.setAccessible(true); 注入所有修饰符。

其实在onClick属性的注释中就已经说明了。

如何绑定android点击事件

绑定android点击事件需要在该空间添加android:onClick="click"属性(click是为事件的方法),具体操作步骤如下:

1、使用Android studio创建一个Android项目,如下图:

2、打开其XML布局文件,如下图:

3、添加一个Button并给android:onClick="click"属性和宽高属性,如下图:

4、在绑定了该XML布局的类中实现该方法,这个方法命名必须和click,这个方法就是该控件的点击事件,如下图:

android 点击事件怎么写

按钮监听的3种方式

使用setOnClickListener (View.OnClickListener l)方法

loginBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

Toast.makeText(ButtonActivity.this, "点击了登录按钮" , Toast.LENGTH_SHORT).show();

}

});

实现接口的方式

public class ButtonActivity extends Activity implements View.OnClickListener {

private Button loginBtn;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.button_activity);

loginBtn = (Button) findViewById(R.id.login_btn);

}

@Override

public void onClick(View view) {

switch (view.getId()){

case R.id.login_btn:

Toast.makeText(ButtonActivity.this, "点击了登录按钮" , Toast.LENGTH_SHORT).show();

break;

default:

break;

}

}

}

在布局文件中加使用android:onClick属性

//1、先在布局文件中声明android:onClick="clickLoginBtn"

Button

android:id="@+id/login_btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="登录"

android:onClick="clickLoginBtn"/

//2、然后在代码总实现该同名方法,注意方法的访问权限必须为public

public void clickLoginBtn(View view){

Toast.makeText(ButtonActivity.this, "点击了登录按钮" , Toast.LENGTH_SHORT).show();

}

Android中点击事件功能实现示例

第一种点击事件

在xml中设置onclick属性

android:onClick="myOnclick"

第二种;获取Button然后一个一个单独绑定点击事件

"

xmlns:tools=" "

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" 

android:id="@+id/btn_imgBtn"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="myOnclick"

android:text="imageButton"

/

android:id="@+id/btn_imgView"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="myOnclick"

android:text="imageView"

/

public class MainActivity extends ActionBarActivity {

private Button btnImageBtn;

private Button btnImageView;

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    btnImageBtn = (Button) findViewById(R.id.btn_imgBtn);

    btnImageView =  (Button) findViewById(R.id.btn_imgView);

btnImageBtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(MainActivity.this, "点击ImageButton", Toast.LENGTH_SHORT).show();

}

});

    btnImageView.setOnClickListener(new MyListener());

}

第三种:写一个类(MyListener)实现OnClickListener接口,然后Button在设置onclickListener的时候new一个MyListener

btnImageView.setOnClickListener(new MyListener());

class MyListener implements OnClickListener{

@Override

public void onClick(View view) {

switch (view.getId()) {

case R.id.btn_imgBtn:

Toast.makeText(MainActivity.this, "点击ImageButton", Toast.LENGTH_SHORT).show();

break;

     case R.id.btn_imgView:

      Toast.makeText(MainActivity.this, "点击imageView", Toast.LENGTH_SHORT).show();

break;

第四种:整个类(MianActivity)实现onclickListener的接口

跳转界面

Intent:意图,用于访问android中的组件

用Intent跳转界面(activity)

第一步:new一个Intent()

Intent intent1 = new Intent(MainActivity.this,ImageButtonActivity.class);

startActivity(intent1);

public void myOnclick(View view){

 switch (view.getId()) {

case R.id.btn_imgBtn:

Intent intent1 = new Intent(MainActivity.this,ImageButtonActivity.class);

startActivity(intent1);

break;

    case R.id.btn_imgView:

     Intent intent2 = new Intent(MainActivity.this,ImageViewActivity.class);

startActivity(intent2);

break;

Intent intent = new Intent(当前的activity,跳转到的acticvity.class);

startActivity(intent);

3.ImageView

展示方式:scaleType:

4.ImageButton:

触摸事件:当控件或者屏幕呗触摸的时候,产生的反应

public boolean onTouchEvent(MotionEvent event) {

imageButton:现在已经呗button代替,用于展示图片的按钮。不能显示文字。

imageView

scaleType:图片展示的方式

fitStart:展示在控件的上方

fitCenter:展示在控件的中间

fitEnd;展示在控件的下方

fitXY:不按照比例拉伸

matrix:矩阵模式

matrix可以设置图片旋转,缩放。移动

获取图片的高度和宽度

int h = imgView.getDrawable().getIntrinsicHeight();

int w = imgView.getDrawable().getIntrinsicWidth();

Matrix m = new Matrix();

m.postRotate(45);

m.postRotate(45, w/2, h/2);

imgView.setImageMatrix(m);

移动事件:

按下:MotionEvent.ACTION_DOWN

抬起:MotionEvent.ACTION_UP

移动:MotionEvent.ACTION_MOVE

获取当前的移动事件,

event.getAction()

"

xmlns:tools=" "

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/img_01"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:src="@drawable/ss"

android:scaleType="fitXY"/

android:id="@+id/img_02"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:src="@drawable/gl"

android:visibility="gone"

android:scaleType="fitXY"/

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/bird"

android:layout_gravity="center"

/

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textSize="20sp"

android:textColor="#ff0000"

android:gravity="center"

android:text="小鸟飞"/

public class MainActivity extends Activity {

private ImageView img01;

private ImageView img02;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

img01 = (ImageView) findViewById(R.id.img_01);

img02 = (ImageView) findViewById(R.id.img_02);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

//System.out.println("被摸了");

if(event.getAction()==MotionEvent.ACTION_UP){

Log.v("TAG", "被抬起来");

if(img01.getVisibility()==View.VISIBLE){

img01.setVisibility(View.GONE);

img02.setVisibility(View.VISIBLE);

}else{

img01.setVisibility(View.VISIBLE);

img02.setVisibility(View.GONE);

}

}else if(event.getAction()==MotionEvent.ACTION_DOWN){

Log.v("TAG", "被按下了");

}else if(event.getAction()==MotionEvent.ACTION_MOVE){

Log.v("TAG", "移动了");

}

return super.onTouchEvent(event);

}


标题名称:android的点击事件,android的点击事件分发
网页网址:http://cdiso.cn/article/dsdddeh.html

其他资讯