请问一下关于android的事件分发机制的有关问题
请教一下关于android的事件分发机制的问题!
现在我有一个这样的需求,两个布局上下的(framelayout)。怎么让上面的获取焦点(不对上面那一层布局文件进行控制),而下面的不获取呢?
我用事件分发机制,试了一试不行,不知道是我设置的不对还是怎么的?
求大家指导指导!!谢谢!!!!
下面是我的布局文件
UnityLayout:
AndrLayout:
到底该在分发的时候做控制还是在拦截的时候控制呢?
------解决思路----------------------
你debug看下,从FrameLayout就可以看下dispatchTouchEvent执行了以后,它跳到哪里执行了,,,
------解决思路----------------------
应该是DispatchTouchEvent返回true吧,不给它的子类传递点击事件
------解决思路----------------------
你的不能获取焦点,是想让unity视图内的控件,比如Button点击没效果,还是怎样,如果是我说的是想让按钮点击没效果,在unity布局进行事件拦截
在者,unity布局和AndrLayout是同一层次的,它们的ViewGroup都是FrameLayout
------解决思路----------------------
看我理解:
UnityLayout和AndrLayout是存在于FrameLayout中间的两个同级View,所以一般的事件分发在他们的子类里面控制是影响不了别一个View的(事件分发是父子之间的传递吧),要想控制只有通过继承FrameLayout,拿到两个View手动去分发事件。
现在我有一个这样的需求,两个布局上下的(framelayout)。怎么让上面的获取焦点(不对上面那一层布局文件进行控制),而下面的不获取呢?
我用事件分发机制,试了一试不行,不知道是我设置的不对还是怎么的?
求大家指导指导!!谢谢!!!!
下面是我的布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.MGSD.ottvr.UnityLayout
android:id="@+id/unity_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</com.MGSD.ottvr.UnityLayout>
<com.MGSD.ottvr.AndrLayout
android:id="@+id/andr_layout"
android:layout_width="200dip"
android:layout_height="200dip"
android:background="#bfe309"
android:orientation="vertical" >
</com.MGSD.ottvr.AndrLayout>
</FrameLayout>
UnityLayout:
public class UnityLayout extends LinearLayout{
public UnityLayout(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public UnityLayout(Context context, AttributeSet attributeSet){
super(context, attributeSet);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Toast.makeText(getContext(), "dispatchTouchEvent", Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Toast.makeText(getContext(), "onInterceptTouchEvent", Toast.LENGTH_SHORT).show();
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Toast.makeText(getContext(), "onTouchEvent", Toast.LENGTH_SHORT).show();
return super.onTouchEvent(event);
}
}
AndrLayout:
public class AndrLayout extends LinearLayout{
public AndrLayout(Context context){
super(context);
}
public AndrLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Toast.makeText(getContext(), "~~dispatchTouchEvent", Toast.LENGTH_SHORT).show();
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Toast.makeText(getContext(), "~~onInterceptTouchEvent", Toast.LENGTH_SHORT).show();
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Toast.makeText(getContext(), "~~onTouchEvent", Toast.LENGTH_SHORT).show();
UnityPlayer.UnitySendMessage("Manger", "WhichHouse", "0");
return true;
}
}
到底该在分发的时候做控制还是在拦截的时候控制呢?
------解决思路----------------------
你debug看下,从FrameLayout就可以看下dispatchTouchEvent执行了以后,它跳到哪里执行了,,,
------解决思路----------------------
应该是DispatchTouchEvent返回true吧,不给它的子类传递点击事件
------解决思路----------------------
你的不能获取焦点,是想让unity视图内的控件,比如Button点击没效果,还是怎样,如果是我说的是想让按钮点击没效果,在unity布局进行事件拦截
public boolean onInterceptTouchEvent(MotionEvent ev) {
Toast.makeText(getContext(), "onInterceptTouchEvent", Toast.LENGTH_SHORT).show();
return true;
}
在者,unity布局和AndrLayout是同一层次的,它们的ViewGroup都是FrameLayout
------解决思路----------------------
看我理解:
UnityLayout和AndrLayout是存在于FrameLayout中间的两个同级View,所以一般的事件分发在他们的子类里面控制是影响不了别一个View的(事件分发是父子之间的传递吧),要想控制只有通过继承FrameLayout,拿到两个View手动去分发事件。