1

从过去的 3 天开始,我一直面临着一个小问题。我的任务是设计一个有两个片段的屏幕。(左侧和右侧)

左侧片段将包含一个列表,但此列表将出现在圆形视图中,例如

|@
|->@

|--->@

|----->@

|-------->@

|------->@

|------->@

|------->@

|-------->@

|----->@

|---->@

|-->@

|@

它应该是可旋转的,当我旋转列表时,我必须显示与第二个(右侧)片段中心的列表项相对应的数据。我打算使用片段。

谁能帮我解决这个问题

谢谢

4

2 回答 2

1

这是我的建议:

您可以使用 ListView,然后自己绘制所有子视图。

好的,您可以这样做:

通过创建一个新类并从 ListView 类派生该类来创建您自己的 ListView。然后,如果需要,您可以使用此方法删除分隔符 setDivider(Drawable divider) 然后您将不得不使用 drawChild(Canvas canvas, View child, long drawingTime) 您也可能最终使用此方法以及受保护的 void dispatchDraw (Canvas canvas) /// 需要在新的 ListView 类中被覆盖以获得更多控制权

如果循环列表中只有字符串,那么您将不得不从列表项的中间索引开始截断字符串......产生圆周运动效果。

这里我考虑ListView类会调用drawChild方法,每次列表上有一个动作,我们可以在那里产生轻微的动画

让我知道你是如何处理它的...

于 2013-03-12T12:28:38.633 回答
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 时都会调用绑定视图,并且会为屏幕上可见的每一行调用绑定视图。因此,您可以获得可见行的圆形模式。

}

于 2013-03-12T14:13:44.883 回答