ANDROID使用责任链模拟事件传递

参考http://blog.csdn.net/sahadev_/article/details/51684998

Android使用责任链模拟事件传递:

1、定义一个接口,用来事件传递

public interface IEvent<T> {

    public boolean onEvent(@NonNull T obj);

}

2、定义一个抽象类,实现了事件的拦截和分发

public abstract class EventStub1<T> implements IEvent1<T> {


protected IEvent1<T> eventStub;

protected T viewStub;


/**

* @param event1

*            下一个接受的事件

* @param viewStub

*            下一个接受的视图

*/

public EventStub1(IEvent1<T> event1, T viewStub) {

this.eventStub = event1;

this.viewStub = viewStub;

}


@Override

public void onEvent(T obj) {

boolean b = onEventImpl(obj);// 判断事件时候被处理,true表示被消费


if (!b && eventStub != null) {// false的时候事件继续传递

eventStub.onEvent(viewStub);

}

}


/**

* 由子类实现

* @param obj

* @return true 表示处理了事件,false表示将继续传递

*/

public abstract boolean onEventImpl(T obj);// 子类实现


}

3、隐藏视图的实现类,用来处理(View可见)或不处理事件(View不可见)

public class HideEventStub extends EventStub1<View> {


public HideEventStub(IEvent1<View> event1, View viewStub) {

super(event1, viewStub);

// TODO Auto-generated constructor stub

}


@Override

public boolean onEventImpl(View obj) {

// TODO Auto-generated method stub

View v = obj;

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

v.setVisibility(View.INVISIBLE);

return true;

}

return false;

}

}

5、测试Activity

//字段

EventStub1<View> sourceStub;

EventStub1<View> tempStub;



@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


tempStub = new HideEventStub(tempStub, findViewById(R.id.button4));// View消失


tempStub = new HideEventStub(tempStub, findViewById(R.id.imageView1));


tempStub = new HideEventStub(tempStub, findViewById(R.id.button3));


sourceStub = new HideEventStub(tempStub, findViewById(R.id.button2));// 第二个消失


}

//隐式事件点击函数

public void dismiss(View v) {

sourceStub.onEvent(findViewById(R.id.button1));// 第一个消失

}


布局文件如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context="com.example.evnetlink.MainActivity" >


    <Button

        android:id="@+id/button1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentTop="true"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="23dp"

        android:text="第二个" />


    <Button

        android:id="@+id/button2"

        style="?android:attr/buttonStyleSmall"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/button1"

        android:layout_below="@+id/button1"

        android:text="第三个" />


    <ImageView

        android:id="@+id/imageView1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_below="@+id/button3"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="22dp"

        android:src="@drawable/ic_launcher" />


    <Button

        android:id="@+id/button4"

        style="?android:attr/buttonStyleSmall"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/button2"

        android:layout_below="@+id/imageView1"

        android:layout_marginTop="16dp"

        android:text="左边滑动" />


    <Button

        android:id="@+id/button5"

        style="?android:attr/buttonStyleSmall"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/button4"

        android:layout_below="@+id/button4"

        android:layout_marginTop="17dp"

        android:text="右边滑动" />


    <Button

        android:id="@+id/button6"

        style="?android:attr/buttonStyleSmall"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/button5"

        android:layout_below="@+id/button5"

        android:onClick="dismiss"

        android:text="Button" />


    <Button

        android:id="@+id/button3"

        style="?android:attr/buttonStyleSmall"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/button2"

        android:layout_below="@+id/button2"

        android:text="第一个" />


</RelativeLayout>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值