public boolean onTouchEvent(MotionEvent event) 你试试这个方法里面event的getEdgeFlags()方法行不行 看看它的返回值
FLAG_WATCH_OUTSIDE_TOUCH Window flag: if you have set FLAG_NOT_TOUCH_MODAL, you can set this flag to receive a single special MotionEvent with the action MotionEvent.ACTION_OUTSIDE for touches that occur outside of your window. 这个参数貌似可以,试试看吧,成功了别忘了发出来。
好了,8#兄弟的方式是可以的,非全屏的Activity确实可以捕捉到全屏的按键事件,没有试之前一直认为是不行的...剩下的只需判断坐标这些就可以了float x = event.getX(); float y = event.getY(); Log.i(TAG, "onTouchEvent, x= "+x+", and y = "+y); if(y < 220) this.finish(); 9#和10#兄弟的方式,我不是很明白,能否说清楚些... 谢谢各位兄弟了! PS:另外发现一个新问题,期待各位大大解惑,这个非全屏的activityB我设置了android:theme="@android:style/Theme.Translucent"的半透主题(因为不设置的话即使不是全屏的activity,它没有的部分也会以黑色填充从而充满全屏),但是我发现设置了这个主题的activity生命周期和普通的activity不一样了:点击模拟器返回按键时,activityB确实消失了,但没有执行onStop和onDestroy方法!下次重新启动activityB时,activityB执行onCreate方法后出现,但接着确执行了上一次消失时的onStop和onDestroy方法!这点小弟百思不得其解,网上查了许久也不得要领.... 有哪位大大知道这一原理吗? PS:大家可以试试,给某个activity加上android:theme="@android:style/Theme.Translucent"属性,再看看log就清楚流程了。
4#的兄弟,B这个不是一个简单的view,有一系列复杂操作,确实得用activity。
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
float x = event.getX();
float y = event.getY();
PointF p = new PointF(x, y);
if(p is in ActivityB)
donothing;
else
this.finish();
return super.onTouchEvent(event);
}PS.非全屏的Activity也可以捕捉到全屏的按键事件.
你试试这个方法里面event的getEdgeFlags()方法行不行 看看它的返回值
float y = event.getY();
Log.i(TAG, "onTouchEvent, x= "+x+", and y = "+y);
if(y < 220)
this.finish();
9#和10#兄弟的方式,我不是很明白,能否说清楚些...
谢谢各位兄弟了!
PS:另外发现一个新问题,期待各位大大解惑,这个非全屏的activityB我设置了android:theme="@android:style/Theme.Translucent"的半透主题(因为不设置的话即使不是全屏的activity,它没有的部分也会以黑色填充从而充满全屏),但是我发现设置了这个主题的activity生命周期和普通的activity不一样了:点击模拟器返回按键时,activityB确实消失了,但没有执行onStop和onDestroy方法!下次重新启动activityB时,activityB执行onCreate方法后出现,但接着确执行了上一次消失时的onStop和onDestroy方法!这点小弟百思不得其解,网上查了许久也不得要领....
有哪位大大知道这一原理吗?
PS:大家可以试试,给某个activity加上android:theme="@android:style/Theme.Translucent"属性,再看看log就清楚流程了。