21天打卡Andoid学到的一些小知识-第十一十二天

简介: 今天我们学习打卡的内容是:Android 10.0 Launcher3 禁止首屏时钟AppWidget拖动到其他屏这个知识。

今天我们学习打卡的内容是:Android 10.0 Launcher3 禁止首屏时钟AppWidget拖动到其他屏这个知识。


当然此次学习的文章链接将会放置文章末尾,有需要的朋友自行查看。


那直接进入分享:


知识Android 10.0 Launcher3 禁止首屏时钟AppWidget拖动到其他屏:

在日常开发中,有时屏幕第一屏默认会放一个时钟AppWidget,但是这个时钟可以被任意拖动到其他屏,这样拖动到其他屏显得很不好看,所以我们根据需求改成不能拖动时钟去其他屏,这就需要去分析拖拽整个流程。


这也是禁止拖动的实现,相关实现还有播放在线音频时,需求是不能拖动进度条,让音频自然播放。以及英语听力考试时要求自然播放不得倒放等。


要了解Android的触摸机制。

直接监听SeekBar 的 OnTouchListener,就可以实现禁止拖动。


相关代码:

packages/apps/Launcher3/src/com/android/launcher3/Workspace.java
@Override
public void onDragStart(DropTarget.DragObject dragObject, DragOptions options) {
if (TestProtocol.sDebugTracing) {
android.util.Log.d(TestProtocol.NO_DRAG_TAG,
"onDragStart 1");
}
if (ENFORCE_DRAG_EVENT_ORDER) {
enforceDragParity("onDragStart", 0, 0);
}
    if (mDragInfo != null && mDragInfo.cell != null && mDragInfo.cell.getParent() != null) {
        CellLayout layout = (CellLayout) mDragInfo.cell.getParent().getParent();
        if (layout != null) layout.markCellsAsUnoccupiedForView(mDragInfo.cell);
    }
    if (mOutlineProvider != null) {
        if (dragObject.dragView != null) {
            Bitmap preview = dragObject.dragView.getPreviewBitmap();
            // The outline is used to visualize where the item will land if dropped
            mOutlineProvider.generateDragOutline(preview);
        }
    }
    updateChildrenLayersEnabled();
    // Do not add a new page if it is a accessible drag which was not started by the workspace.
    // We do not support accessibility drag from other sources and instead provide a direct
    // action for move/add to homescreen.
    // When a accessible drag is started by the folder, we only allow rearranging withing the
    // folder.
    boolean addNewPage = !(options.isAccessibleDrag && dragObject.dragSource != this);
    if (addNewPage) {
        mDeferRemoveExtraEmptyScreen = false;
        addExtraEmptyScreenOnDrag();
        if (dragObject.dragInfo.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET
                && dragObject.dragSource != this) {
            // When dragging a widget from different source, move to a page which has
            // enough space to place this widget (after rearranging/resizing). We special case
            // widgets as they cannot be placed inside a folder.
            // Start at the current page and search right (on LTR) until finding a page with
            // enough space. Since an empty screen is the furthest right, a page must be found.
            int currentPage = getPageNearestToCenterOfScreen();
            for (int pageIndex = currentPage; pageIndex < getPageCount(); pageIndex++) {
                CellLayout page = (CellLayout) getPageAt(pageIndex);
                if (page.hasReorderSolution(dragObject.dragInfo)) {
                    setCurrentPage(pageIndex);
                    break;
                }
            }
        }
    }
    // Always enter the spring loaded mode
    if (TestProtocol.sDebugTracing) {
        android.util.Log.d(TestProtocol.NO_DRAG_TAG,
                "onDragStart 2");
    }
    mLauncher.getStateManager().goToState(SPRING_LOADED);
}


学习收获:


学习是人这一生永远离不开的主题,然而学什么、怎样学也始终在拷问着每一位在人生旅途中奋力前行的行进者,本次活动中让我对学习有了新的认识。珍惜CSDN的这个打卡活动,去努力的多学习相关自己感兴趣的知识,通过这个平台去不断的提升自己,这样才能在以后的工作中脱颖而出。,只要自己愿意努力,就一定会成功的。


相关文章
|
Windows 网络协议 缓存
流媒体技术学习笔记之(十一)Windows环境运行EasyDarwin
流媒体平台框架下载安装 Github下载   下载地址:https://github.com/EasyDarwin/EasyDarwin/releases 解压安装   选择Windows 安装平台的安装包(下载解压)   把解压生成的文件夹重命名放在本地磁盘,我这里测试放在E盘:   介绍其中的来个批处理文件: start.
2953 0
|
应用服务中间件 nginx Docker
使用nginx进行http以及socket端口转发(快速提高docker开发效率)
本文介绍如何使用nginx进行http以及socket端口转发以快速提高docker开发效率
|
JavaScript
Vue中 使用 iframe 嵌入本地 HTML 页面 并 相互通信
Vue中 使用 iframe 嵌入本地 HTML 页面 并 相互通信
2460 0
Vue中 使用 iframe 嵌入本地 HTML 页面 并 相互通信
|
搜索推荐 Java Go
深入了解基数排序算法
深入了解基数排序算法
154 4
|
监控 小程序 安全
【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(2)
小程序提供便捷的鲜花选购和配送服务,汇聚全球优质鲜花品种,确保新鲜送达。用户可轻松挑选花束,享受个性化配送,并通过地图功能查看配送位置。此外,物流功能实时更新,保证鲜花安全快速到达。代码示例展示了地图和物流信息的页面布局与交互实现。 ### 配送与物流功能亮点 1. **地图功能**:使用`map.wxml`, `map.wxss`, 和 `map.js` 实现定位与导航,确保精准配送。 2. **物流追踪**:通过`logistics.wxml`, `logistics.wxss`, 和 `logistics.js` 显示详细物流状态,提供流畅的用户体验。
300 1
【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(2)
|
9月前
|
关系型数据库 OLAP OLTP
深入剖析 OALP 与 OLTP:概念、区别、技术、场景
本文深入剖析了OLTP(在线事务处理)与OLAP(在线分析处理)的概念、区别、技术及应用场景。OLTP专注于实时业务操作,确保数据一致性和高效性,适用于金融、电商等行业;OLAP则侧重于历史数据分析,支持复杂查询和多维分析,助力企业决策。两者在数据特点、系统设计、用户类型及数据库设计上存在显著差异。合理结合OLTP和OLAP,可提升企业的运营效率和决策水平。
1478 15
|
Java 数据库连接 编译器
Java注解详解,自定义注解,利用反射解析注解
概要 这篇文章将会带领你了解Java注解,注解的使用,注解的解析,利用反射解析运行时注解,相信有一定Java基础的小伙伴一定会接触大量的注解,Spring , Hibernate , MyBatis等著名的框架也有很多关于注解方面的应用,对于注解的使用...
2843 0
|
网络协议 Linux API
Linux 端口复用详解(附有案例代码)
Linux 端口复用详解(附有案例代码)
|
编解码 前端开发 算法
前端CryptoJS和Java后端数据互相加解密(AES)
最近刚好在做一个简单的保险代理人运营平台,主要是为了方便个人展业,由于有些客户数据比较敏感,所以在用户登录时准备对登录密码进行一波加密后再传输。
前端CryptoJS和Java后端数据互相加解密(AES)
|
图形学 C++ iOS开发
Unity 符号表
Unity 符号表
817 0
Unity 符号表