android 飘心动画(直播点赞)效果(三)---相关知识点整理

这篇文章是关于 android 飘心动画(直播点赞)效果
相关知识点的整理,应为我对动画相关的部分,不是很熟悉,所以对于第一篇文章上面所涉及的只是进行了总结和整理。

1.android 自定义view之 onMeasure()

可以说重载onMeasure(),onLayout(),onDraw()三个函数构建了自定义View的外观形象。再加上onTouchEvent()等重载视图的行为,可以构建任何我们需要的可感知到的自定义View。

其中mode的解释说明:
mode共有三种情况,取值分别为MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, MeasureSpec.AT_MOST。

MeasureSpec.EXACTLY是精确尺寸,当我们将控件的layout_width或layout_height指定为具体数值时如andorid:layout_width=”50dip”,或者为FILL_PARENT是,都是控件大小已经确定的情况,都是精确尺寸。

MeasureSpec.AT_MOST是最大尺寸,当控件的layout_width或layout_height指定为WRAP_CONTENT时,控件大小一般随着控件的子空间或内容进行变化,此时控件尺寸只要不超过父控件允许的最大尺寸即可。因此,此时的mode是AT_MOST,size给出了父控件允许的最大尺寸。

MeasureSpec.UNSPECIFIED是未指定尺寸,这种情况不多,一般都是父控件是AdapterView,通过measure方法传入的模式。
因此,在重写onMeasure方法时要根据模式不同进行尺寸计算。
下面代码就是一种比较典型的方式:

@Override    
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    
    setMeasuredDimension(getMeasuredLength(widthMeasureSpec, true), getMeasuredLength(heightMeasureSpec, false));    
}    


private int getMeasuredLength(int length, boolean isWidth) {    
    int specMode = MeasureSpec.getMode(length);    
    int specSize = MeasureSpec.getSize(length);    
    int size;    
    int padding = isWidth ? getPaddingLeft() + getPaddingRight()    
            : getPaddingTop() + getPaddingBottom();    
    if (specMode == MeasureSpec.EXACTLY) {    
        size = specSize;    
    } else {    
        size = isWidth ? padding + mWave.length / 4 : DEFAULT_HEIGHT    
                + padding;    
        if (specMode == MeasureSpec.AT_MOST) {    
            size = Math.min(size, specSize);    
        }    
    }    
    return size;    
}  

相关链接地址:http://blog.youkuaiyun.com/pi9nc/article/details/18764863


2.android 动画插值器

2.1插值器的文字解释:

http://blog.youkuaiyun.com/jason0539/article/details/16370405

Interpolator用于动画中的时间插值,其作用就是把0到1的浮点值变化映射到另一个浮点值变化。

(1) AccelerateDecelerateInterpolator 在动画开始与结束的地方速率改变比较慢,在中间的时候加速
(2) AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
(3) AnticipateInterpolator 开始的时候向后然后向前甩
(4) AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
(5) BounceInterpolator 动画结束的时候弹起
(6) CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
(7) DecelerateInterpolator 在动画开始的地方快然后慢
(8) LinearInterpolator 以常量速率改变
(9.) OvershootInterpolator 向前甩一定值后再回到原来位置

2.2插值器的图表解释:

http://www.cnblogs.com/mengdd/p/3346003.html

2.3插值器的简单使用(最好自己动手写一遍)
https://github.com/walfud/HelloInterpolator

2.4自定义插值器(高级用法):
http://www.cnblogs.com/wondertwo/p/5327586.html


3.android 动画 path 和 pathMeasure

Path 的基础讲解:
http://blog.youkuaiyun.com/cquwentao/article/details/51363475

Path 和pathMeasure 的进阶:
http://blog.youkuaiyun.com/cquwentao/article/details/51436852

PathMeasure
PathMeasure主要用来测量path,通过它,我们可以得到路径上特定的点的坐标等等。先看看他的基本方法。

(1) 构造方法
public PathMeasure()
public PathMeasure(Path path, boolean forceClosed)
如上,有两个方法,第一个就不讲解了,第二个方法中有两个参数;
path:需要测量的path
forceClosed:是否关闭path

(2) setPath
public void setPath(Path path, boolean forceClosed)
这里就是指定需要测量的path,基本和上面的第二个构造函数类似。

(3) getLength
返回当前path的总长度。

(4) getMatrix
public boolean getMatrix(float distance, Matrix matrix, int flags)
这个方法和上面的其实类似,只是他返回的是一个处理好的matrix,但是这个matrix是以左上角作为旋转点,所以需要将这个点移动到中心点。
其中还多了一个参数flags,指的是这个martrix需要什么信息。flags的值有如下两个
PathMeasure.POSITION_MATRIX_FLAG:位置信息
pathMeasure.TANGENT_MATRIX_FLAG:切边信息,方位角信息,使得图片按path旋转。


4.线程安全的累加类 atomicinteger

atomicinteger类的作用:特别适用于高并发访问。

AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。

相关地址:
http://www.cnblogs.com/Gordon-YangYiBao/archive/2012/08/07/2626422.html

http://haininghacker-foxmail-com.iteye.com/blog/1401346

<think>好的,我现在需要帮助用户了解开发Android端社交项目所需的知识点,包括UI设计、网络通信、数据存储、用户认证等方面的最佳实践和常用技术栈。首先,我需要整理这些方面的关键技术和工具,确保涵盖用户提到的所有领域。 首先,UI设计部分,现代Android开发推荐使用Jetpack Compose,因为它更高效和灵活。同时需要提到布局优化、动画和Material Design,这些都是提升用户体验的重要部分。引用中提到了Compose和Navigation组件,所以需要引用[^2]。 接下来是网络通信,社交应用离不开与服务器的交互。常用的库有Retrofit和OkHttp,可能需要提到WebSocket用于实时通信,还有序列化工具如Gson或Moshi。这部分可能需要参考常见的实践,但引用中没有直接提到,所以暂时不需要引用。 数据存储方面,本地存储可以使用Room数据库,SharedPreferences或DataStore。对于云端存储,Firebase是常用的后端服务,包括实时数据库和存储。引用[^3]提到Spring Boot的生态系统,但可能不直接相关,不过Firebase是Android常用技术,可能需要单独说明。 用户认证部分,需要集成第方登录如Google、微信,以及实现手机号验证。Firebase Authentication和OAuth2.0协议是常用的,这里可以引用[^2]提到的开发效率,或者[^1]提到的开放性,但可能更直接的是Firebase相关的引用,不过用户提供的引用中没有明确提到,所以需要看是否有间接关联。 实时通信功能可能需要使用WebSocket、Firebase的实时数据库或第方服务如Socket.IO。消息推送可以用Firebase Cloud Messaging,这部分同样可能需要引用关于高效和灵活性的部分。 安全方面,数据加密和HTTPS是必须的,可能提到ProGuard或R8混淆代码,这些属于最佳实践,引用可能需要结合提到的开源资源和灵活性。 性能优化方面,内存管理和网络优化是关键,LeakCanary工具检测内存泄漏,Glide或Coil处理图片加载。这里可以引用提到的提高代码质量部分。 测试与部署,单元测试和UI测试工具,持续集成工具如Jenkins,以及发布流程,这些属于开发流程的最佳实践,引用可能关联提到的Spring Boot生态系统,但不太直接,所以可能不引用。 技术栈组合示例需要综合上述技术,比如Compose+Retrofit+Room+Firebase,这里可以引用[^2]和关于开发效率和开放性的部分。 最后生成相关问题,确保问题覆盖各个知识点,并引导深入学习。需要检查引用是否恰当,每个引用标记要对应正确的引用内容。例如,提到Compose时引用[^2],提到生态系统时引用[^3],提到市场占有率和开放性时引用。 现在需要组织这些,确保结构清晰,每个部分都有对应的技术和最佳实践,同时自然添加引用标记。可能遗漏的部分需要补充,比如推送通知、安全措施等。确保每个引用都准确,不强制引用所有,只在相关部分添加。</think>### Android社交应用开发知识点详解 #### 一、UI设计与交互 1. **现代UI框架** - 使用$Jetpack Compose$构建声明式界面,简化复杂布局开发。例如实现动态列表: ```kotlin @Composable fun SocialFeed(posts: List<Post>) { LazyColumn { items(posts) { post -> PostCard(post) } } } ``` - 采用$Material Design 3$规范,确保界面符合现代设计标准 - 通过$MotionLayout$实现精细动画,提升用户交互体验 2. **导航管理** - 使用$Navigation Component$管理Fragment/Compose页面跳转 - 深层链接处理:`navDeepLink { uriPattern = "app://profile/{userId}" }` #### 二、网络通信 1. **RESTful API交互** - 使用$Retrofit2 + OkHttp3$处理网络请求 - 添加拦截器实现统一鉴权: ```kotlin val client = OkHttpClient.Builder() .addInterceptor(AuthInterceptor()) .build() ``` 2. **实时通信** - 通过$WebSocket$或$Socket.IO$实现即时消息 - 使用$Firebase Realtime Database$同步在线状态 3. **数据序列化** - 采用$kotlinx.serialization$或$Moshi$进行JSON转换 - 使用$Protobuf$优化数据传输效率 #### 、数据存储 1. **本地存储** - 关系型数据:$Room$数据库+$Paging3$分页加载 - 键值对存储:$DataStore$替代SharedPreferences 2. **云端同步** - 使用$Firebase Firestore$实现多设备同步 - 图片/视频存储:$Firebase Storage$分块上传 #### 四、用户认证 1. **登录方式整合** - 手机验证:集成$Firebase Authentication$短信验证[^2] -方登录:$OAuth2.0$对接微信/QQ/Google - 生物识别:$Biometric API$实现指纹/面部识别 2. **安全策略** - 使用$JWT$令牌管理会话 - 敏感数据加密:$Android Keystore$存储密钥 #### 五、社交核功能 1. **好友关系系统** - 实现关注/粉丝逻辑: $$ \text{关系状态} = \begin{cases} 0 & \text{无关系} \\ 1 & \text{已关注} \\ 2 & \text{互相关注} \end{cases} $$ - 使用$GraphQL$优化复杂关系查询 2. **内容互动** - /评论实时更新:$WebSocket$推送 - 消息推送:$Firebase Cloud Messaging(FCM)$集成 #### 六、性能优化 1. **内存管理** - 使用$LeakCanary$检测内存泄漏 - 图片加载:$Coil$或$Glide$实现懒加载 2. **网络优化** - 响应缓存:$Retrofit$添加`Cache-Control`头 - 请求合并:GraphQL替代多REST请求 #### 七、技术栈组合示例 | 领域 | 推荐技术组合 | |-----------|-----------------------------| | UI层 | Compose + Material3 + Navigation | | 网络层 | Retrofit2 + OkHttp3 + Gson | | 本地存储 | Room + DataStore | | 云端服务 | Firebase生态体系 | | 实时通信 | Socket.IO + WebSocket | | 安全认证 | JWT + Keystore | #### 八、最佳实践建议 1. 采用$MVVM$架构隔离业务逻辑与UI 2. 使用$Hilt$依赖注入提升可测试性 3. 通过$WorkManager$处理后台任务 4. 实施$CI/CD$流程:Jenkins/GitLab CI自动化构建
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值