我正在 android 中实现一个 ListView ,它看起来就像这样并滚动
我一直在通过在我的适配器的 getView 中设置膨胀行的布局参数来做到这一点,但由此引发的问题是 ListView 变得生涩。即,它仅在一行完全从屏幕传递并调用 getView 时更新行,为所有可见行提供新参数,从而导致抖动可以应用动画并且可以精确地获取 ListView 滚动位置。 我想要的是 View 之间的平滑过渡,即当 ListView 向上移动一点时,内部 View 应该随着该移动精确地缩放。
这是我解决这个问题的第一级实现,希望它可以帮助任何有兴趣的人,arrHeight 和 arrWidth 是在 Activity 开始时使用贝塞尔路径算法动态创建的
public class TimelinePinsAdapter extends ParentLazyAdapter {
LinearLayout ll_PinsContainer;
LinearLayout.LayoutParams llParams_PinParameters;
public TimelinePinsAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
super(a, d);
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.rowsinflate, null, false);
ll_PinsContainer = (LinearLayout) vi.findViewById(R.id.item);
llParams_PinParameters =
new LinearLayout.LayoutParams(0,
(int) TimeLineActivity.arrHeight[position % 7]);
ll_PinsContainer.setLayoutParams(llParams_PinParameters);
return vi;
}
}
最佳答案
在尝试实现“弯曲” ListView 时,我发现了一个从 v2 beta Android Wear 支持库中窃取的解决方案。
关键是新的WearableRecyclerView - 在此链接中查看您需要的所有信息。如何将支持库添加到您的项目的详细信息:https://developer.android.com/wear/preview/start.html
此回收器 View 允许您提供自定义 OffsettingHelper 以实现基于每个列表项的当前位置的特殊转换。
顺便说一句,无论如何,您都应该使用 RecyclerView,因为这会回收您的 View 并提高性能;这几乎可以消除您提到的生涩动画,因为不必在每次出现时都创建新 View 。
关于Android 弯曲 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25019429/