自定义view

悬停view的使用

非 Y 不嫁゛ 提交于 2019-11-28 04:18:09
首先是布局资源 activity_main.xml <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <com.example.stickview.MyScrollView android:id="@+id/scroll" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"

Android性能优化之布局优化篇

谁说胖子不能爱 提交于 2019-11-27 13:46:45
怎样才能写出优秀的Android App,是每一个程序员追求的目标。那么怎么才能写出一个优秀的App呢?相信很多初学者也会有这种迷茫。一句话来回答这个问题:细节很重要。今天我们就从最基础的XML布局来谈谈怎么提高Android性能问题吧! 也许你经常会遇到比较复杂的布局,这种情况下,最简单的方法就是多层嵌套实现效果,但是最简单的方法是否是最优的方法呢? 这里需要打一个大大的问号?????经验告诉我们,往往简单的方法,得到的结果不是最优解,那么我们通过一个例子来研究一下怎么去优化我们的XML布局吧,下面通过经典微信中的“发现”tab页面中的布局来看看怎么实现。 上面这张图片是微信界面截图,看到这张效果图的第一眼会让开发者想到使用线性布局实现这种左边图片,右边文字,一行白色背景效果很方便。那么我们就按照一般思路写出如下布局代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

Android学习_MVC与Adapter

久未见 提交于 2019-11-27 12:05:05
一、 MVC 模式 MVC模式代表Model-View-Controller(模型-视图-控制器)模式。这种模式用于应用程序的分层开发。 l Model(模型):代表一个存取数据的对象或 JAVA POJO。负责执行程序的核心运算与判断逻辑。通过view获得用户输入的数据,然后根据从数据库查询相关的信息,最后进行运算和判断, 再将得到的结果交给view来显示。 l View(视图):视图代表模型包含的数据的可视化。 l Controller(控制器):控制器作用于模型和视图上,是model与view之间的枢纽。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。 二、 Adapter Adapter就是中间的这个Controller的部分。 l BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter! l ArrayAdapter:支持泛型操作,最简单的一个Adapter,只能展现一行文字~ l SimpleAdapter:同样具有良好扩展性的一个Adapter,可以自定义多种效果! l SimpleCursorAdapter:用于显示简单文本类型的listView,一般在数据库那里会用到,不过有点过时, 不推荐使用! 来源: https://www.cnblogs.com/pomodoro/p/11361901

Activity跳转Flag详解

自古美人都是妖i 提交于 2019-11-27 07:45:03
Android 的一个特色就是 application A 的 activity 可以启动 application B 的 activity,尽管 A 和 B 是毫无干系的,而在用户看来,两个场景紧密联系,视觉上二者构成了一个整体。Android 就是把这种误觉定义为 Task,它既不是 class,也不是 AndroidMainifest.xml 中的一个元素。从表现上看 Task 就像是一个 stack,一个一个的 activity 是构成 stack 的元素,做着入栈 (push) 和出栈 (pop-up)这样简单重复性的劳动。 默认的规则总是满足大多数的应用场景,但是也总会有一些例外打破习以为常的惯例。Task 的默认规则同样并非牢不可破,修改的方法还是有的。借助 Intent 中的 flag 和 AndroidMainifest.xml 中 activity 元素的属性,就可以控制到 Task 里 Activity 的关联关系和行为。 在 android.content.Intent 中一共定义了20种不同的 flag,其中和 Task 紧密关联的有四种: 1.FLAG_ACTIVITY_NEW_TASK 2.FLAG_ACTIVITY_CLEAR_TOP 3.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 4.FLAG_ACTIVITY

事件分发机制

别来无恙 提交于 2019-11-27 06:06:59
摘要 大部分的App都是由网络访问,数据储存和GUI交互构成,在Android中网络访问和数据储存分别有Retrofit/Volley,Ormlite/GreeDao;FrameWork 有Rxjava。GUI交互却是无穷无尽和业务相关,对于一个用户来说,他们也大多只关心GUI表现出来的 在android开发设计模式中,最广泛应用的就是监听、回调,进而形成了事件响应的过程。然后处理相应的业务逻辑。 一、 Android分发机制概述: Touch事件分发中只有两个主角:ViewGroup和View。Activity的Touch事件事实上是调用它内部的ViewGroup的Touch事件,可以直接当成ViewGroup处理。 View在ViewGroup内,ViewGroup也可以在其他ViewGroup内,这时候把内部的ViewGroup当成View来分析。 ViewGroup的相关事件有三个:onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent。View的相关事件只有两个:dispatchTouchEvent、onTouchEvent。 先分析ViewGroup的处理流程:首先得有个结构模型概念:ViewGroup和View组成了一棵树形结构,最顶层为Activity的ViewGroup,下面有若干的ViewGroup节点

第十单元 内容提供者

大城市里の小女人 提交于 2019-11-27 05:58:32
第十单元 读取短信java代码 布局 自定义适配器 helper类 自定义短信对象 获取手机联系人 自定义手机类 自定义Helper类 包含了一个按钮的主类 读取短信java代码 package com . example . ap . EP2 ; import android . Manifest ; import android . annotation . SuppressLint ; import android . content . ContentResolver ; import android . content . pm . PackageManager ; import android . database . Cursor ; import android . database . sqlite . SQLiteDatabase ; import android . net . Uri ; import android . os . Build ; import android . provider . Telephony ; import android . support . annotation . NonNull ; import android . support . v7 . app . AppCompatActivity ; import

RecyclerView瀑布流优化方案探讨

旧街凉风 提交于 2019-11-27 03:29:28
目录介绍 01.规则瀑布流实现 02.不规则瀑布流实现 2.1 实现方式 2.2 遇到问题 03.瀑布流上拉加载 04.给瀑布流设置分割线 05.自定义Manager崩溃 06.如何避免刷新抖动 07.为何有时出现跳动 08.瀑布流图片优化 09.onBindViewHolder优化 10.瀑布流item点击事件优化 11.Glide加载优化 12.建议指定图片的宽高 欢迎同行探讨瀑布流极致优化方案 如果同行看到这篇文章,有好的瀑布流优化方案,欢迎给出建议,或者给链接也可以。 需求: 瀑布流大概有10来中不同type的item视图,然后视图是根据动态设置宽高,服务器会返回比例 瀑布流中item需要切割圆角 目前使用glide加载图片 产品说让参考抖音快手类的app,让瀑布流滑动效果特别流畅……但目前遇到问题是滑动十几页没什么问题,但是滑动三四十页的时候会出现卡顿。欢迎同行给出建议! 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢! 链接地址: https://github

Android App 卡顿分析

梦想的初衷 提交于 2019-11-26 16:49:07
极力推荐Android 开发大总结文章:欢迎收藏 程序员Android 力荐 ,Android 开发者需要的必备技能 Android App 反应卡顿,从技术上将就是UI 渲染慢。 UI渲染 是从您的应用程序生成一个框架并将其显示在屏幕上的行为。 为了确保用户与您的应用程序的交互顺利,您的应用程序应该在 16ms 内渲染帧数达到 每秒60帧(为什么60fps?) 。 如果您的应用程序因UI渲染速度缓慢而受到影响,那么系统将被迫跳过帧,用户将感觉到您的应用程序中出现卡顿。 我们把这个叫做 jank 。 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 1.UI 渲染简介 2.识别Jank 3.Fix Jank 4.引起Jank 通用问题举例 1.UI 渲染简介 为了帮助您提高应用程序质量, Android 会自动监视您的应用程序是否有空,并在 Android 生命危险仪表板中显示信息。 有关如何收集数据的信息,请参阅 Play Console 文档。 如果您的应用程序出现问题,本页提供诊断和解决问题的指导。 Android 生命危险仪表板和 Android 系统会跟踪使用 UI Toolkit 的应用程序的渲染时间统计信息(应用程序的用户可见部分是从 Canvas 或 View hierarchy 绘制的)。 如果您的应用程序不使用 UI

自定义模块

倾然丶 夕夏残阳落幕 提交于 2019-11-26 14:14:19
目录 1. 模块的定义与分类 模块是什么? 人们常说的脚本是什么? 2. import 3 from ... import ... 3.2 from...import... 与import对比 4. py文件的两种功能 作用:用来控制.py文件在不同的应用场景下执行不同的逻辑(或者是在模块文件中测试代码) 5. 模块的搜索路径 模块的查找顺序 [TOC] 1. 模块的定义与分类 模块是什么? 一个函数封装一个功能,你使用的软件可能就是由n多个函数组成的(先备考虑面向对象)。比如抖音这个软件,不可能将所有程序都写入一个文件,所以咱们应该将文件划分,这样其组织结构要好并且代码不冗余。加入分了10个文件,每个文件里面可能都有相同的功能(函数),怎么办?所以将这些相同的功能封装到一个文件中,那么这个存储着很多常用的功能的py文件,就是模块。 模块就是文件,存放一堆常用的函数,谁用谁拿。怎么拿?比如:我要策马奔腾共享人世繁华,应该怎么样?我应该骑马,你也要去浪,你是不是也要骑马。 我们说一个函数就是一个功能,那么把一些常用的函数放在一个py文件中,这个文件就称之为模块,模块,就是一些列常用功能的集合体。 ## 为什么要使用模块? 从文件级别组织程序,更方便管理 随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理

工作记录(只是简单的记录下)

孤人 提交于 2019-11-26 13:51:58
12-25:工作需求 需要做带多选功能的diglog--实现 //损益时间diglog private void lossTimeDigLog(List<String> years){ AlertDialog.Builder builder = new AlertDialog.Builder(ExpenditureDetailAct.this); LayoutInflater inflater = LayoutInflater.from(ExpenditureDetailAct.this); View v = inflater.inflate(R.layout.losstime_dig, null); final LossTimesAdap adap = new LossTimesAdap(ExpenditureDetailAct.this,years); TextView queding = v.findViewById(R.id.queding); TextView quxiao = v.findViewById(R.id.quxiao); ListView lv1 = v.findViewById(R.id.lv1); lv1.setDivider(null); lv1.setAdapter(adap); final Dialog dialog = builder