Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
半调子程序猿
arcselectlist
提交
4e48162f
A
arcselectlist
项目概览
半调子程序猿
/
arcselectlist
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
arcselectlist
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
4e48162f
编写于
5月 29, 2020
作者:
P
pqaikc
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
样式调整
上级
4836f5ca
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
66 addition
and
82 deletion
+66
-82
app/src/main/java/com/ccb/arcselect/ui/ArcSelectActivity.java
...src/main/java/com/ccb/arcselect/ui/ArcSelectActivity.java
+15
-2
app/src/main/java/com/ccb/arcselect/ui/ArcSelectRotateActivity.java
...in/java/com/ccb/arcselect/ui/ArcSelectRotateActivity.java
+1
-0
app/src/main/java/com/ccb/arcselect/ui/AutoSelectActivity.java
...rc/main/java/com/ccb/arcselect/ui/AutoSelectActivity.java
+4
-40
app/src/main/java/com/ccb/arcselect/ui/HorizontalSelectActivity.java
...n/java/com/ccb/arcselect/ui/HorizontalSelectActivity.java
+4
-40
app/src/main/java/com/ccb/arcselect/utils/CenterItemUtils.java
...rc/main/java/com/ccb/arcselect/utils/CenterItemUtils.java
+42
-0
未找到文件。
app/src/main/java/com/ccb/arcselect/ui/ArcSelectActivity.java
浏览文件 @
4e48162f
...
...
@@ -19,6 +19,7 @@ import android.widget.ImageView;
import
android.widget.TextView
;
import
com.ccb.arcselect.R
;
import
com.ccb.arcselect.utils.CenterItemUtils
;
import
com.ccb.arcselect.utils.TUtils
;
import
com.ccb.arcselect.utils.UiUtils
;
import
com.ccb.arcselect.view.MatrixTranslateLayout
;
...
...
@@ -28,6 +29,7 @@ import java.util.List;
/**
* 矩阵实现弧形列表 && 滑动后自动选中居中的条目
* 未使用精确计算居中
*/
public
class
ArcSelectActivity
extends
AppCompatActivity
{
...
...
@@ -86,6 +88,7 @@ public class ArcSelectActivity extends AppCompatActivity {
}
private
boolean
isTouch
=
false
;
//用户主动触摸后的标记
private
List
<
CenterItemUtils
.
CenterViewItem
>
centerViewItems
=
new
ArrayList
<>();
private
void
findView
()
{
mAdapter
=
new
MAdapter
();
...
...
@@ -106,8 +109,18 @@ public class ArcSelectActivity extends AppCompatActivity {
int
centerPositionDiffer
=
(
la
-
fi
)
/
2
;
int
centerChildViewPosition
=
fi
+
centerPositionDiffer
;
centerChildViewPosition
=
centerChildViewPosition
<
childViewHalfCount
?
childViewHalfCount
:
centerChildViewPosition
;
centerChildViewPosition
=
centerChildViewPosition
<
mAdapter
.
getItemCount
()
-
childViewHalfCount
-
1
?
centerChildViewPosition
:
mAdapter
.
getItemCount
()
-
childViewHalfCount
-
1
;
centerViewItems
.
clear
();
//遍历循环,获取到和中线相差最小的条目索引(精准查找最居中的条目)
if
(
centerChildViewPosition
!=
0
){
for
(
int
i
=
centerChildViewPosition
-
1
;
i
<
centerChildViewPosition
+
2
;
i
++)
{
View
cView
=
recyclerView
.
getLayoutManager
().
findViewByPosition
(
i
);
int
viewTop
=
cView
.
getTop
()+(
cView
.
getHeight
()/
2
);
centerViewItems
.
add
(
new
CenterItemUtils
.
CenterViewItem
(
i
,
Math
.
abs
(
centerToTopDistance
-
viewTop
)));
}
CenterItemUtils
.
CenterViewItem
centerViewItem
=
CenterItemUtils
.
getMinDifferItem
(
centerViewItems
);
centerChildViewPosition
=
centerViewItem
.
position
;
}
scrollToCenter
(
centerChildViewPosition
);
}
}
...
...
app/src/main/java/com/ccb/arcselect/ui/ArcSelectRotateActivity.java
浏览文件 @
4e48162f
...
...
@@ -30,6 +30,7 @@ import java.util.List;
/**
* 矩阵实现弧形列表 && 滑动后自动选中居中的条目 && 图片跟随旋转
* 未使用精确计算居中条目 , 可以参考CenterItemUtils类 , 或其它选中居中的界面的实现
*/
public
class
ArcSelectRotateActivity
extends
AppCompatActivity
{
...
...
app/src/main/java/com/ccb/arcselect/ui/AutoSelectActivity.java
浏览文件 @
4e48162f
...
...
@@ -18,6 +18,7 @@ import android.widget.TextView;
import
android.widget.Toast
;
import
com.ccb.arcselect.R
;
import
com.ccb.arcselect.utils.CenterItemUtils
;
import
com.ccb.arcselect.utils.TUtils
;
import
com.ccb.arcselect.utils.UiUtils
;
...
...
@@ -90,7 +91,7 @@ private TextView tv;
private
boolean
isTouch
=
false
;
private
List
<
CenterViewItem
>
centerViewItems
=
new
ArrayList
<>();
private
List
<
Center
ItemUtils
.
Center
ViewItem
>
centerViewItems
=
new
ArrayList
<>();
private
void
findView
()
{
mAdapter
=
new
MAdapter
();
recyclerView
.
setAdapter
(
mAdapter
);
...
...
@@ -117,10 +118,10 @@ private TextView tv;
for
(
int
i
=
centerChildViewPosition
-
1
;
i
<
centerChildViewPosition
+
2
;
i
++)
{
View
cView
=
recyclerView
.
getLayoutManager
().
findViewByPosition
(
i
);
int
viewTop
=
cView
.
getTop
()+(
cView
.
getHeight
()/
2
);
centerViewItems
.
add
(
new
CenterViewItem
(
i
,
Math
.
abs
(
centerToTopDistance
-
viewTop
)));
centerViewItems
.
add
(
new
Center
ItemUtils
.
Center
ViewItem
(
i
,
Math
.
abs
(
centerToTopDistance
-
viewTop
)));
}
CenterViewItem
centerViewItem
=
getMinDifferItem
(
centerViewItems
);
CenterItemUtils
.
CenterViewItem
centerViewItem
=
CenterItemUtils
.
getMinDifferItem
(
centerViewItems
);
centerChildViewPosition
=
centerViewItem
.
position
;
}
...
...
@@ -241,41 +242,4 @@ private TextView tv;
}
}
}
/**
* 计算距离中间最近的一个ItemView
* @param itemHeights
* @return
*/
private
static
CenterViewItem
getMinDifferItem
(
List
<
CenterViewItem
>
itemHeights
){
CenterViewItem
minItem
=
itemHeights
.
get
(
0
);
//默认第一个是最小差值
for
(
int
i
=
0
;
i
<
itemHeights
.
size
();
i
++)
{
//遍历获取最小差值
if
(
itemHeights
.
get
(
i
).
differ
<=
minItem
.
differ
){
minItem
=
itemHeights
.
get
(
i
);
}
}
return
minItem
;
}
// public static void main(String[] a){
//
// CenterViewItem i = getMinDifferItem(Arrays.asList(
// new CenterViewItem(2 , 39)
// ,new CenterViewItem(3 , 3)
// ,new CenterViewItem(1 , 9)
// ,new CenterViewItem(4 , 449)));
// System.out.println("position:"+i.position+" height:"+i.differ);
// }
static
class
CenterViewItem
{
public
CenterViewItem
(
int
position
,
int
differ
)
{
this
.
position
=
position
;
//当前Item索引
this
.
differ
=
differ
;
//当前item和居中位置的差值
}
public
int
position
;
public
int
differ
;
}
}
app/src/main/java/com/ccb/arcselect/ui/HorizontalSelectActivity.java
浏览文件 @
4e48162f
...
...
@@ -19,6 +19,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.ccb.arcselect.R
;
import
com.ccb.arcselect.utils.CenterItemUtils
;
import
com.ccb.arcselect.utils.TUtils
;
import
com.ccb.arcselect.utils.UiUtils
;
...
...
@@ -91,7 +92,7 @@ private final int CHILDVIEWSIZE = 100;
private
boolean
isTouch
=
false
;
private
List
<
CenterViewItem
>
centerViewItems
=
new
ArrayList
<>();
private
List
<
Center
ItemUtils
.
Center
ViewItem
>
centerViewItems
=
new
ArrayList
<>();
private
void
findView
()
{
mAdapter
=
new
MAdapter
();
recyclerView
.
setAdapter
(
mAdapter
);
...
...
@@ -118,10 +119,10 @@ private final int CHILDVIEWSIZE = 100;
for
(
int
i
=
centerChildViewPosition
-
1
;
i
<
centerChildViewPosition
+
2
;
i
++)
{
View
cView
=
recyclerView
.
getLayoutManager
().
findViewByPosition
(
i
);
int
viewLeft
=
cView
.
getLeft
()+(
cView
.
getWidth
()/
2
);
centerViewItems
.
add
(
new
CenterViewItem
(
i
,
Math
.
abs
(
centerToLiftDistance
-
viewLeft
)));
centerViewItems
.
add
(
new
Center
ItemUtils
.
Center
ViewItem
(
i
,
Math
.
abs
(
centerToLiftDistance
-
viewLeft
)));
}
CenterViewItem
centerViewItem
=
getMinDifferItem
(
centerViewItems
);
CenterItemUtils
.
CenterViewItem
centerViewItem
=
CenterItemUtils
.
getMinDifferItem
(
centerViewItems
);
centerChildViewPosition
=
centerViewItem
.
position
;
}
...
...
@@ -231,41 +232,4 @@ private final int CHILDVIEWSIZE = 100;
}
}
}
/**
* 计算距离中间最近的一个ItemView
* @param itemHeights
* @return
*/
private
static
CenterViewItem
getMinDifferItem
(
List
<
CenterViewItem
>
itemHeights
){
CenterViewItem
minItem
=
itemHeights
.
get
(
0
);
//默认第一个是最小差值
for
(
int
i
=
0
;
i
<
itemHeights
.
size
();
i
++)
{
//遍历获取最小差值
if
(
itemHeights
.
get
(
i
).
differ
<=
minItem
.
differ
){
minItem
=
itemHeights
.
get
(
i
);
}
}
return
minItem
;
}
// public static void main(String[] a){
//
// CenterViewItem i = getMinDifferItem(Arrays.asList(
// new CenterViewItem(2 , 39)
// ,new CenterViewItem(3 , 3)
// ,new CenterViewItem(1 , 9)
// ,new CenterViewItem(4 , 449)));
// System.out.println("position:"+i.position+" height:"+i.differ);
// }
static
class
CenterViewItem
{
public
CenterViewItem
(
int
position
,
int
differ
)
{
this
.
position
=
position
;
//当前Item索引
this
.
differ
=
differ
;
//当前item和居中位置的差值
}
public
int
position
;
public
int
differ
;
}
}
app/src/main/java/com/ccb/arcselect/utils/CenterItemUtils.java
0 → 100644
浏览文件 @
4e48162f
package
com.ccb.arcselect.utils
;
import
java.util.List
;
public
class
CenterItemUtils
{
/**
* 计算距离中间最近的一个ItemView
* @param itemHeights
* @return
*/
public
static
CenterViewItem
getMinDifferItem
(
List
<
CenterViewItem
>
itemHeights
){
CenterViewItem
minItem
=
itemHeights
.
get
(
0
);
//默认第一个是最小差值
for
(
int
i
=
0
;
i
<
itemHeights
.
size
();
i
++)
{
//遍历获取最小差值
if
(
itemHeights
.
get
(
i
).
differ
<=
minItem
.
differ
){
minItem
=
itemHeights
.
get
(
i
);
}
}
return
minItem
;
}
// public static void main(String[] a){
//
// CenterViewItem i = getMinDifferItem(Arrays.asList(
// new CenterViewItem(2 , 39)
// ,new CenterViewItem(3 , 3)
// ,new CenterViewItem(1 , 9)
// ,new CenterViewItem(4 , 449)));
// System.out.println("position:"+i.position+" height:"+i.differ);
// }
public
static
class
CenterViewItem
{
public
CenterViewItem
(
int
position
,
int
differ
)
{
this
.
position
=
position
;
//当前Item索引
this
.
differ
=
differ
;
//当前item和居中位置的差值
}
public
int
position
;
public
int
differ
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录