今天在公司接到一个比较特殊的需求.需求相当简单,引导用户去点击某个按钮.
设计图如下:
1.解决问题思路
1.使用PopupWindow.因为PopupWindow能够指定相对于某个View进行显示.所以我们可以使用这中方式做实现.
2.需求.
1.当点击PopupWindow 需要让PopupWindow消失.
2.当点击PopupWindow指向的按钮的时候.需要触发当前按钮的事件. 但是点击其他按钮,(不包括PopupWindows中的按钮)不能触发该按钮的事件.
3.需要解决的问题.
第一:我们需要给PopupWindow设置一个OnTouchListener对象. 该对象的onTouch(View v, MotionEvent event)中的event对象.用来获取你点击屏幕的位置.
第二:我们需要监听PopupWindow的Dismiss事件 我们需要在 PopupWindow.OnDismissListener 的 onDismiss 方法中获取该Buttom在屏幕中的位置.
核心代码如下:
popupWindow.setTouchInterceptor(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_DOWN) mEvent = event;
return true;
}
});
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss()
{
int[] local = new int[2];
mButton.getLocationOnScreen(local);
if(mEvent.getRawX() < local[0] || mEvent.getX() > (local[0] + mButton.getWidth()) || mEvent.getRawY() < local[1] || mEvent.getRawY()> ( local[1] + mButton.getHeight()))
{
return;
}
mButton.callOnClick();
}
});