提交 4e48162f 编写于 作者: P pqaikc

样式调整

上级 4836f5ca
......@@ -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);
}
}
......
......@@ -30,6 +30,7 @@ import java.util.List;
/**
* 矩阵实现弧形列表 && 滑动后自动选中居中的条目 && 图片跟随旋转
* 未使用精确计算居中条目 , 可以参考CenterItemUtils类 , 或其它选中居中的界面的实现
*/
public class ArcSelectRotateActivity extends AppCompatActivity {
......
......@@ -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<CenterItemUtils.CenterViewItem> 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 CenterItemUtils.CenterViewItem(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;
}
}
......@@ -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<CenterItemUtils.CenterViewItem> 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 CenterItemUtils.CenterViewItem(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;
}
}
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.
先完成此消息的编辑!
想要评论请 注册