* 以下的几个方法用来,让fragment能够监听touch事件
*/
private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MyOnTouchListener>(10);
@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{
for (MyOnTouchListener listener : onTouchListeners)
{
listener.onTouch(ev);
}
return super.dispatchTouchEvent(ev);
}
public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener)
{
onTouchListeners.add(myOnTouchListener);
}
public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener)
{
onTouchListeners.remove(myOnTouchListener);
}
public interface MyOnTouchListener
{
public boolean onTouch(MotionEvent ev);
}
1、在Activity中注册监听
2、在fragment获得监听
myOnTouchListener = new MainActivity.MyOnTouchListener()
{
@Override
public boolean onTouch(MotionEvent event)
{
if (event.getActionMasked() == MotionEvent.ACTION_DOWN)
{
// 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
mEvents = 0;
View v = getActivity().getCurrentFocus();
lastY = (int) event.getY();
handler.removeMessages(3);
}
else if (event.getActionMasked() == MotionEvent.ACTION_POINTER_UP)
{
// 过滤多点触碰
mEvents = -1;
Log.e("MotionEvent.ACTION_POINTER_UP", "mEvents = " + mEvents);
}
else if (event.getActionMasked() == MotionEvent.ACTION_UP)
{
Log.e("MotionEvent.ACTION_UP", "mEvents=" + mEvents);
Log.e("MotionEvent.ACTION_UP", "origin_height=" + origin_height);
Log.e("MotionEvent.ACTION_UP", "origin_width=" + origin_width);
height = origin_height;
width = origin_width;
if (srcollView.getTop() == 0 || pullDownY <= 100)
{
LayoutParams para;
para = iv_bg.getLayoutParams();
para.height = height;
para.width = width;
// iv_bg.setLayoutParams(para);
}
}
else if (event.getActionMasked() == MotionEvent.ACTION_MOVE)
{
if (mEvents == 0)
{
if (srcollView.getTop() == 0)
{
pullDownY = 0;
radio_iv = 2;
}
if (event.getY() - lastY < 0)
{
lastY = (int) event.getY();
}
else
{
pullDownY = (event.getY() - lastY) / radio_iv;
}
if (pullDownY < 0)
{
pullDownY = 0;
}
if (pullDownY > layout_noUp.getMeasuredHeight())
{
pullDownY = layout_noUp.getMeasuredHeight();
}
if (srcollView.getTop() != 0)
{
LayoutParams para;
para = iv_bg.getLayoutParams();
int totalOffset = (int) (height + pullDownY);
int f = totalOffset / height;
para.height = totalOffset;
para.width = width * f;
// iv_bg.setLayoutParams(para);
mask_height = para.height;
mask_width = para.width;
// Log.e("单点触控", "mask_height = " + mask_height);
// Log.e("单点触控", "mask_width = " + mask_width);
}
}
else
{
mEvents = 0;
radio_iv = (float) (2 + 2 * Math.tan(Math.PI / 2 / layout_noUp.getMeasuredHeight() * (pullDownY)));
lastY = event.getY();
height = mask_height;
width = mask_width;
// Log.e("mEevent = -1", "mask_height = " + height);
// Log.e("mEevent = -1", "mask_width = " + width);
}
}
return true;
}
};
((MainActivity) getActivity()).registerMyOnTouchListener(myOnTouchListener);