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

样式调整

上级 4836f5ca
...@@ -19,6 +19,7 @@ import android.widget.ImageView; ...@@ -19,6 +19,7 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.ccb.arcselect.R; import com.ccb.arcselect.R;
import com.ccb.arcselect.utils.CenterItemUtils;
import com.ccb.arcselect.utils.TUtils; import com.ccb.arcselect.utils.TUtils;
import com.ccb.arcselect.utils.UiUtils; import com.ccb.arcselect.utils.UiUtils;
import com.ccb.arcselect.view.MatrixTranslateLayout; import com.ccb.arcselect.view.MatrixTranslateLayout;
...@@ -28,6 +29,7 @@ import java.util.List; ...@@ -28,6 +29,7 @@ import java.util.List;
/** /**
* 矩阵实现弧形列表 && 滑动后自动选中居中的条目 * 矩阵实现弧形列表 && 滑动后自动选中居中的条目
* 未使用精确计算居中
*/ */
public class ArcSelectActivity extends AppCompatActivity { public class ArcSelectActivity extends AppCompatActivity {
...@@ -86,6 +88,7 @@ public class ArcSelectActivity extends AppCompatActivity { ...@@ -86,6 +88,7 @@ public class ArcSelectActivity extends AppCompatActivity {
} }
private boolean isTouch = false; //用户主动触摸后的标记 private boolean isTouch = false; //用户主动触摸后的标记
private List<CenterItemUtils.CenterViewItem> centerViewItems = new ArrayList<>();
private void findView() { private void findView() {
mAdapter = new MAdapter(); mAdapter = new MAdapter();
...@@ -106,8 +109,18 @@ public class ArcSelectActivity extends AppCompatActivity { ...@@ -106,8 +109,18 @@ public class ArcSelectActivity extends AppCompatActivity {
int centerPositionDiffer = (la - fi) / 2; int centerPositionDiffer = (la - fi) / 2;
int centerChildViewPosition = fi + centerPositionDiffer; int centerChildViewPosition = fi + centerPositionDiffer;
centerChildViewPosition = centerChildViewPosition < childViewHalfCount ? childViewHalfCount : centerChildViewPosition; centerViewItems.clear();
centerChildViewPosition = centerChildViewPosition < mAdapter.getItemCount() - childViewHalfCount -1 ? centerChildViewPosition : mAdapter.getItemCount() - childViewHalfCount -1; //遍历循环,获取到和中线相差最小的条目索引(精准查找最居中的条目)
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); scrollToCenter(centerChildViewPosition);
} }
} }
......
...@@ -30,6 +30,7 @@ import java.util.List; ...@@ -30,6 +30,7 @@ import java.util.List;
/** /**
* 矩阵实现弧形列表 && 滑动后自动选中居中的条目 && 图片跟随旋转 * 矩阵实现弧形列表 && 滑动后自动选中居中的条目 && 图片跟随旋转
* 未使用精确计算居中条目 , 可以参考CenterItemUtils类 , 或其它选中居中的界面的实现
*/ */
public class ArcSelectRotateActivity extends AppCompatActivity { public class ArcSelectRotateActivity extends AppCompatActivity {
......
...@@ -18,6 +18,7 @@ import android.widget.TextView; ...@@ -18,6 +18,7 @@ import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.ccb.arcselect.R; import com.ccb.arcselect.R;
import com.ccb.arcselect.utils.CenterItemUtils;
import com.ccb.arcselect.utils.TUtils; import com.ccb.arcselect.utils.TUtils;
import com.ccb.arcselect.utils.UiUtils; import com.ccb.arcselect.utils.UiUtils;
...@@ -90,7 +91,7 @@ private TextView tv; ...@@ -90,7 +91,7 @@ private TextView tv;
private boolean isTouch = false; private boolean isTouch = false;
private List<CenterViewItem> centerViewItems = new ArrayList<>(); private List<CenterItemUtils.CenterViewItem> centerViewItems = new ArrayList<>();
private void findView() { private void findView() {
mAdapter = new MAdapter(); mAdapter = new MAdapter();
recyclerView.setAdapter(mAdapter); recyclerView.setAdapter(mAdapter);
...@@ -117,10 +118,10 @@ private TextView tv; ...@@ -117,10 +118,10 @@ private TextView tv;
for (int i = centerChildViewPosition -1 ; i < centerChildViewPosition+2; i++) { for (int i = centerChildViewPosition -1 ; i < centerChildViewPosition+2; i++) {
View cView = recyclerView.getLayoutManager().findViewByPosition(i); View cView = recyclerView.getLayoutManager().findViewByPosition(i);
int viewTop = cView.getTop()+(cView.getHeight()/2); 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; centerChildViewPosition = centerViewItem.position;
} }
...@@ -241,41 +242,4 @@ private TextView tv; ...@@ -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; ...@@ -19,6 +19,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.ccb.arcselect.R; import com.ccb.arcselect.R;
import com.ccb.arcselect.utils.CenterItemUtils;
import com.ccb.arcselect.utils.TUtils; import com.ccb.arcselect.utils.TUtils;
import com.ccb.arcselect.utils.UiUtils; import com.ccb.arcselect.utils.UiUtils;
...@@ -91,7 +92,7 @@ private final int CHILDVIEWSIZE = 100; ...@@ -91,7 +92,7 @@ private final int CHILDVIEWSIZE = 100;
private boolean isTouch = false; private boolean isTouch = false;
private List<CenterViewItem> centerViewItems = new ArrayList<>(); private List<CenterItemUtils.CenterViewItem> centerViewItems = new ArrayList<>();
private void findView() { private void findView() {
mAdapter = new MAdapter(); mAdapter = new MAdapter();
recyclerView.setAdapter(mAdapter); recyclerView.setAdapter(mAdapter);
...@@ -118,10 +119,10 @@ private final int CHILDVIEWSIZE = 100; ...@@ -118,10 +119,10 @@ private final int CHILDVIEWSIZE = 100;
for (int i = centerChildViewPosition -1 ; i < centerChildViewPosition+2; i++) { for (int i = centerChildViewPosition -1 ; i < centerChildViewPosition+2; i++) {
View cView = recyclerView.getLayoutManager().findViewByPosition(i); View cView = recyclerView.getLayoutManager().findViewByPosition(i);
int viewLeft = cView.getLeft()+(cView.getWidth()/2); 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; centerChildViewPosition = centerViewItem.position;
} }
...@@ -231,41 +232,4 @@ private final int CHILDVIEWSIZE = 100; ...@@ -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.
先完成此消息的编辑!
想要评论请 注册