快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

android点击,android点击按钮显示文本

Android模拟点击

个人博客: haichenyi.com 。感谢关注

创新互联公司专业为企业提供义乌网站建设、义乌做网站、义乌网站设计、义乌网站制作等企业网站建设、网页设计与制作、义乌企业网站模板建站服务,10余年义乌做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

  本篇介绍实现模拟点击的两种方式:

  举个栗子:我们现在需要实现点击A按钮,触发B按钮点击事件的效果:两个按钮在布局里面随便创建就好了。

   第一种方式就是:调用performClick事件

  这种方式很简单,但是有一个弊端,就是不会传递触摸点坐标,只是模拟一下btn2的点击事件。

   第二种方式就是:MotionEvent事件

  这种方式比较麻烦,用到的就是view的事件分发,一个简单的点击事件的触发就是down和up组成,当然还有平移我们这里不考虑。

   第一步 ,先用MotionEvent.obtain创建两个事件:一个down事件,一个up事件,创建的时候需要传递坐标点,传你目标view的范围内的坐标就行。

   第二步 ,通过目标view,也就是这里的btn2去把这两个事件分发出去,通过dispatchTouchEvent分发,这样就完成了一次模拟点击事件,分发完记得回收

  这样,就完成了一次模拟点击,并且坐标也传递了。因为,创建这两个事件的时候就传递了。解决了performClick的弊端。

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点击事件

1.(不推荐)结合layout文件声明方法实现点击事件的小案例:

2. 内部实现类完成点击事件的小案例

在 activity_login.xml 中加上

之后在 LoginActivity 这个类中实现一个 ClickListener 类

之后在LoginActivity的 Oncreate 中创建内部实现类的对象并设置点击事件

3. Activity实现OnClickListener

4. 匿名内部实现类

Android 点击回调传递

在使用MultiTypeAdapter实现RecyclerView多类型显示的时候,会创建一个ViewHolder和ViewBinder,此时如果要在Activity或者Fragment相应点击事件的时候,需要在ViewHolder和ViewBinder之间做传递。如果一个ViewHolder下有RecyclerView,然后也使用了MultiTypeAdapter,那么这个点击事件的回调将会是一件相当头疼的事情。

在使用 LifeCycle 时,发现他只需要当前类实现 LifecycleObserver ,然后通过调用 addObserver 方法即可实现事件传递。由此想到点击事件是否也可以使用此种形式来实现。

DEMO

在受到 LifeCycle 的启发下,模仿这写了几个类。

一个点击事件如果在某个类中如果需要做操作,那么需要实现该接口。

继承OnItemClick,并实现具体的方法。

基本点击事件Observer

这一层,对事件在OnBindViewHolder中做了一次传递,通过dispatchObserver方法,将ViewBinder中的事件传递到了ViewHolder中。

定义两个点击事件。

创建实体类,和Binder相对应。

在覆写 setData 方法的时候,一定要调用super。不然事件无法传递。

响应事件的回调,只需要调用 getObserver 方法,然后传入对应的Observer,如果有,就直接调用方法。

adapter传递事件,也是通过dispatchObserver方法。

ViewBinder其实就不需要做什么事情了,比较简单。


网页题目:android点击,android点击按钮显示文本
文章地址:http://6mz.cn/article/hooghj.html

其他资讯