过去3天我一直面临一个小问题。我的任务是设计一个带有两个片段的屏幕。(左侧和右侧)
Leftside片段将包含一个列表,但此列表将以圆形视图显示,例如
| @
| - > @
| ---> @
| -----> @
| ------> @
| -------> @
| -------> @
| -------> @
| ------> @
| -----> @
| ----> @
| - > @
| @
并且它应该是可旋转的,当我旋转列表时,我必须显示与第二个(右侧)片段中心的列表项对应的数据。我打算用碎片。
任何人都可以帮我解决问题
谢谢
答案 0 :(得分:1)
这是我的建议:
您可以使用ListView,然后自己绘制所有子视图。
好的,你可以这样做:
通过创建一个新类并从ListView类派生该类来创建自己的ListView。 然后,如果需要,可以使用此方法setDivider(Drawable divider)删除分隔符 然后你将不得不使用drawChild(Canvas canvas,View child,long drawingTime) 此外,您可能最终使用此方法以及受保护的void dispatchDraw(Canvas canvas)///将需要在新的ListView类中重写以获得更多控制
如果循环列表中只包含字符串,则必须从列表项的中间索引开始截断字符串....生成循环运动影响。
这里我认为ListView类每次在列表上有移动时都会调用drawChild方法,并且我们可以生成轻微的动画
让我知道你如何继续...
答案 1 :(得分:1)
如果您将使用自定义适配器,则在您的bindview方法中..抓取每个子视图并为视图提供一个新的边距布局参数,其乘数根据存在的子视图总数递增和递减。
你可以通过getCount();
显示所有孩子将边距布局应用于视图组。
我做了同样的事情,除了我的结构对应于像模式一样的梯子。
编辑: 这些是我的代码中的一些破碎片段,可以让您了解。
//This is my custom adapter that extends CursorAdapter
@Override
public void bindView(View view, Context context, final Cursor cursor)
{
final RelativeLayout parent = (RelativeLayout)view.findViewById(R.id.text_wrapper);
//This is a parent view that i assigned as a top parent in my xml defining rows of listview
I am finding it through view of bindview. If i don't do this I'll get NPE.
//this is how you will be setting margins for each view
ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) parent
.getLayoutParams();
//here I am getting my relative layouts margin params.
mlp.leftMargin = 50*multiplier; //this will offset your each row. here multiplier can be like 0,1,2,3,2,1,0 giving you a circular view.you might have to write some method to get your desired multiplier value.
每次调用NotifyDatasetChanged时都会调用绑定视图,并为屏幕上可见的每一行调用绑定视图。因此,您可以获得可见行的圆形图案。
}