SystemUI下拉通知栏和下拉快捷设置栏的对应设置
来源:互联网 发布:巨人网络官网 编辑:程序博客网 时间:2024/05/01 14:33
根据SystemUI下的PanelView,他就是下拉通知栏和下拉快捷设置栏所继承的父类,这里面实现了下拉的动作监听,即是对status bar最下面那根横线的监听,当对她进行OnTouch时间时,判断下拉的状态,当return true表示,OnTouch事件已经被消费了,不再分给别的组件使用;当return false表示,OnTouch事件未被消费,会分给别的组件使用,由于此处未对事件进行消费,则不会进行后续的操作(比如下拉之类的)
protected void onFinishInflate() {
super.onFinishInflate();mHandleView = findViewById(R.id.handle);
loadDimens();
if (DEBUG) logf("handle view: " + mHandleView);
if (mHandleView != null) {
mHandleView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// 20160720 by geo
float checkX = event.getX();
WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
hidequickstubischeck = SystemProperties.getBoolean("persist.sys.hidequickstub", false);
if (hidequickstubischeck && (checkX > width/2)) {
isClick = false;
}else {
isClick = true;
}
// 20160720 by geo
int pointerIndex = event.findPointerIndex(mTrackingPointer);
if (pointerIndex < 0) {
pointerIndex = 0;
mTrackingPointer = event.getPointerId(pointerIndex);
}
final float y = event.getY(pointerIndex);
final float rawDelta = event.getRawY() - event.getY();
final float rawY = y + rawDelta;
if (DEBUG) logf("handle.onTouch: a=%s p=[%d,%d] y=%.1f rawY=%.1f off=%.1f",
MotionEvent.actionToString(event.getAction()),
mTrackingPointer, pointerIndex,
y, rawY, mTouchOffset);
PanelView.this.getLocationOnScreen(mAbsPos);
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
// 20160720 by geo
if (isClick) {
mTracking = true;
mHandleView.setPressed(true);
postInvalidate(); // catch the press state change
mInitialTouchY = y;
mVelocityTracker = FlingTracker.obtain();
trackMovement(event);
mTimeAnimator.cancel(); // end any outstanding animations
mBar.onTrackingStarted(PanelView.this);
mTouchOffset = (rawY - mAbsPos[1]) - mExpandedHeight;
if (mExpandedHeight == 0) {
mJustPeeked = true;
runPeekAnimation();
}
break;
}else{
return false;
// 20160720 by geo
}
case MotionEvent.ACTION_POINTER_UP:
final int upPointer = event.getPointerId(event.getActionIndex());
if (mTrackingPointer == upPointer) {
// gesture is ongoing, find a new pointer to track
final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
final float newY = event.getY(newIndex);
final float newRawY = newY + rawDelta;
mTrackingPointer = event.getPointerId(newIndex);
mTouchOffset = (newRawY - mAbsPos[1]) - mExpandedHeight;
mInitialTouchY = newY;
}
break;
case MotionEvent.ACTION_MOVE:
final float h = rawY - mAbsPos[1] - mTouchOffset;
if (h > mPeekHeight) {
if (mPeekAnimator != null && mPeekAnimator.isStarted()) {
mPeekAnimator.cancel();
}
mJustPeeked = false;
}
if (!mJustPeeked) {
PanelView.this.setExpandedHeightInternal(h);
mBar.panelExpansionChanged(PanelView.this, mExpandedFraction);
}
trackMovement(event);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
mFinalTouchY = y;
mTracking = false;
mTrackingPointer = -1;
mHandleView.setPressed(false);
postInvalidate(); // catch the press state change
mBar.onTrackingStopped(PanelView.this);
trackMovement(event);
float vel = 0, yVel = 0, xVel = 0;
boolean negative = false;
if (mVelocityTracker != null) {
// the velocitytracker might be null if we got a bad input stream
mVelocityTracker.computeCurrentVelocity(1000);
yVel = mVelocityTracker.getYVelocity();
negative = yVel < 0;
xVel = mVelocityTracker.getXVelocity();
if (xVel < 0) {
xVel = -xVel;
}
if (xVel > mFlingGestureMaxXVelocityPx) {
xVel = mFlingGestureMaxXVelocityPx; // limit how much we care about the x axis
}
vel = (float)Math.hypot(yVel, xVel);
if (vel > mFlingGestureMaxOutputVelocityPx) {
vel = mFlingGestureMaxOutputVelocityPx;
}
mVelocityTracker.recycle();
mVelocityTracker = null;
}
// if you've barely moved your finger, we treat the velocity as 0
// preventing spurious flings due to touch screen jitter
final float deltaY = Math.abs(mFinalTouchY - mInitialTouchY);
if (deltaY < mFlingGestureMinDistPx
|| vel < mFlingExpandMinVelocityPx
) {
vel = 0;
}
if (negative) {
vel = -vel;
}
if (DEBUG) logf("gesture: dy=%f vel=(%f,%f) vlinear=%f",
deltaY,
xVel, yVel,
vel);
fling(vel, true);
break;
}
return true;
}});
}
}
0 0
- SystemUI下拉通知栏和下拉快捷设置栏的对应设置
- SystemUI下拉通知栏的源码分析
- SystemUI下拉通知栏的源码分析
- SystemUI下拉通知栏的源码分析,屏蔽通知栏,监听通知栏下拉动作
- SystemUI 下拉通知栏快捷键加载流程
- 如何设置通知栏下拉不可用
- 为Android2.3添加下拉通知栏的快捷开关
- Android 6.0 SystemUI 下拉栏添加自定义快捷开关(草稿)
- 禁用通知栏的下拉
- 下拉菜单的通知栏
- Android5.0 下拉通知栏快捷开关的添加(必看)
- 设置导航栏下拉菜单
- Android 6.0 SystemUI之通知栏下拉时周边全透明
- 6.0SystemUI定制修改后可能引起恢复出厂化设置后下拉无效的原因
- 禁止下拉通知栏
- 下拉框的设置
- 下拉栏和通知栏的透明美化处理
- SystemUI的下拉状态栏分析
- Git之(三)Git辅助命令
- css对上传按钮美化
- ajax向服务端发送请求的简单使用
- 笔记本自带键盘输入错乱
- C++中的string类的用法
- SystemUI下拉通知栏和下拉快捷设置栏的对应设置
- 高效使用搜索引擎
- js遍历增加标签
- 消除javaScript Cookies的安全隐患,实现用户相关数据本地存储
- 邮件的发送与接收原理
- 新的篇章,通过博客来锻炼技术表达能力,学习能力
- 向数据库插入使用分隔符分隔(任意分隔符)的字符串脚本
- Introduction to Android Espresso
- 虚拟内存与物理内存