有趣的Touch事件转移。
点击一个Button,另一个Button却被点击了。
关键是点击的那个Button将event分发dispatchTouchEvent到另一个Button那里。
例子:
MainActivity
package com.example.touchdemo7;
import com.customview.MyButton;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
MyButton myButton;
Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1=(Button)this.findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener(){
int count=0;
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
count++;
button1.setText("我被点击了+"+count);
}
});
myButton=(MyButton)this.findViewById(R.id.myButton1);
myButton.setDispatchToView(button1);
}
}
MyFrameLayout
package com.customview;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.FrameLayout;
public class MyFrameLayout extends FrameLayout{
public MyFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO 自动生成的构造函数存根
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO 自动生成的方法存根
return false;
}
}
MyButton
package com.customview;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
public class MyButton extends Button{
View dispatchToView;
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO 自动生成的构造函数存根
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
// TODO 自动生成的方法存根
if(dispatchToView==null){
return super.dispatchTouchEvent(event);
}else{
return dispatchToView.dispatchTouchEvent(event);
}
}
public View getDispatchToView() {
return dispatchToView;
}
public void setDispatchToView(View dispatchToView) {
this.dispatchToView = dispatchToView;
}
}
activity_main
<FrameLayout 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" >
<com.customview.MyFrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="bottom" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</com.customview.MyFrameLayout>
<com.customview.MyButton
android:id="@+id/myButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点我" />
</FrameLayout>