Android之FanLayout制作圆弧滑动效果
作者:陈小缘 时间:2023-01-14 16:58:29
前言
在上篇文章(Android实现圆弧滑动效果之ArcSlidingHelper篇)中,我们把圆弧滑动手势处理好了,那么这篇文章我们就来自定义一个ViewGroup,名字叫就风扇布局吧,接地气。 在开始之前,我们先来看2张效果图 (表情包来自百度贴吧):
哈哈,其实还有以下特性的,就先不发那么多图了:
简单分析
圆弧手势滑动我们现在可以跳过了(因为在上一篇文章中做好了),先从最基本的开始,想一下该怎么layout? 其实也很简单:从上面几张效果图中我们可以看出来,那一串串小表情是围着大表情旋转的,即小表情的旋转点(mPivotX,mPivotY) = 大表情的中心点(宽高 ÷ 2)
,至于旋转,肯定是用setRotation方法啦,不过在setRotation之前,还要先set一下PivotX和PivotY。
创建FanLayout
首先是onLayout方法:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int childCount = getChildCount();
//每个item要旋转的角度
float angle = 360F / childCount;
//旋转基点,现在也就是这个ViewGroup的中心点
mPivotX = getWidth() / 2;
mPivotY = getHeight() / 2;
for (int i = 0; i < childCount; i++) {
View view = getChildAt(i);
int layoutHeight = view.getMeasuredHeight() / 2;
int layoutWidth = view.getMeasuredWidth();
//在圆心的右边,并且垂直居中
view.layout(mPivotX, mPivotY - layoutHeight, mPivotX + layoutWidth, mPivotY + layoutHeight);
//更新旋转的中心点
view.setPivotX(0);
view.setPivotY(layoutHeight);
//设置旋转的角度
view.setRotation(i * angle);
}
}
onMeasure我们先不考虑那么细,measureChildren后直接setMeasuredDimension:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
measureChildren(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
}
来源:https://blog.csdn.net/u011387817/article/details/80788704
标签:Android,弧形,滑动,圆弧,FanLayout
0
投稿
猜你喜欢
C#子线程更新UI控件的方法实例总结
2022-08-31 15:40:23
idea右键没有java class选项问题解决方案
2023-05-29 23:38:40
C#用链式方法表达循环嵌套
2023-04-14 06:54:23
Unity实现VR中在黑板上写字效果
2021-08-04 20:11:11
Filter、Servlet、Listener的学习_动力节点Java学院整理
2021-08-12 00:05:49
Java数据结构之队列(动力节点Java学院整理)
2021-09-22 04:58:19
Spring Boot 与DBunit 配合使用方法
2022-07-29 13:29:28
SpringBoot集成POI实现Excel导入导出的示例详解
2022-12-05 19:09:10
Java 设计模式中的命令模式详情
2023-11-15 23:25:33
C#对Json进行序列化和反序列化
2023-04-16 09:06:15
基于springboot实现redis分布式锁的方法
2023-06-16 01:36:56
解决在for循环中remove list报错越界的问题
2022-01-12 15:27:56
C#中利用Lotus notes公共邮箱发送邮件的方法
2023-10-02 03:00:12
解析java中super的用法分析
2021-11-17 19:39:52
FrameLayout和Fragment处理Android应用UI布局实例
2021-07-05 15:27:09
Java8中CompletableFuture的用法全解
2023-09-08 15:08:55
Java中局部变量和成员变量的区别详解
2021-12-26 11:53:36
Java中Range函数的简单介绍
2023-10-18 05:33:35
WPF中NameScope的查找规则详解
2023-01-18 14:22:02
C# 利用Selenium实现浏览器自动化操作的示例代码
2023-08-10 23:43:15