Android View系统源码分析(十一)—— View.setVisibility(int visibility)
2016-07-04 10:28
549 查看
View.setSelected()
下载VSDX
/**
* Changes the selection state of this view. A view can be selected or not.
* 改变该视图的选择项状态。一个视图能被选中或者不被选中两种状态。
*
* Note that selection is not the same as focus. Views are typically
* selected in the context of an AdapterView like ListView or GridView;
* the selected view is the view that is highlighted.
*
* 选中和焦点是不同的。视图典型的内容选中是象ListView或者GridView一样。
* 选中的视图是高亮的。
*
* @param selected true if the view must be selected, false otherwise
*/
public void setSelected(boolean selected) {
//如果当前逻辑标志有 SELECTED 属性位,并且不等于将要设置的 SELECTED 的属性。
if (((mPrivateFlags & SELECTED) != 0) != selected) {
//清除逻辑标记位的 SELECTED 属性,或者 添加 SELECTED 属性。
mPrivateFlags = (mPrivateFlags & ~SELECTED) | (selected ? SELECTED : 0);
//如果设置后的属性为不选中,那么就重置按下状态。该函数内部仅仅是清除了PRESSED的标志位,并调用 removeLongPressCallback,清除长按的回调。
//注意:当视图正处于PRESSED状态时,我们主动又给该视图添加非SELECTED状态,那么该视图将会同时失去PRESSED状态,并忽略后续的长按消息处理。
if (!selected) resetPressedState();
//因为 SELECTED 属性也会造成视图的显示改变,所以需要重绘。
invalidate();
//重绘状态
refreshDrawableState();
//应用程序可以重载该该函数以便此刻进行的其他操作。
dispatchSetSelected(selected);
}
}
View.resetPressedState()
private void resetPressedState() {
//如果视图标记的 可视标记位 为 不显示,直接return掉。
if ((mViewFlags & ENABLED_MASK) == DISABLED) {
return;
}
//如果当前是按下的状态
if (isPressed()) {
//取消按下状态
setPressed(false);
//如果存在长按监听没有触发
if (!mHasPerformedLongPress) {
//删除长按回调
removeLongPressCallback();
}
}
}
相关文章推荐
- Android View系统源码分析(十)—— View.setVisibility(int visibility)
- Android getChildmeasureSpec 方法的分析
- Android ContentProvider完整案例
- Android View系统源码分析(九)—— ViewRoot.ensureTouchMode()
- 图解 Android 事件分发机制
- Android四大组件之Service精通
- Android View系统源码分析(八)—— View.onFocusedChanged()
- android 正则表达式
- Android 常用Canvas
- Android序列化:Serializable和Parcelable
- Android View系统源码分析(七)—— View.refreshDrawableState()
- Android View系统源码分析(六)—— 导致View树重新遍历的时机
- Android Support Library 学习入门
- Android View系统源码分析(五)—— View.onTouchEvent()默认执行方式
- Android Studio 错误: 编码UTF-8的不可映射字符
- android Gradle的几个基本概念
- android Gradle的几个基本概念
- android Gradle的几个基本概念
- Android强制设置横屏或竖屏
- android:autoLink