0

我有一个包含三个文本视图的相对布局,每个文本视图的宽度都是屏幕的一半。我希望用户能够使用滚动手势并将这些文本视图一起移动,如果位于最左边的文本视图离开屏幕,它会移动到第三个文本视图旁边的最右边。所以我想创造一种无尽的滚动系统。

但是,使用下面的代码会导致滚动时视图之间出现间隙,我认为间隙宽度取决于滚动速度。

这是问题截图的链接:http: //postimg.org/image/bnl0dqsgd/

目前我只实现了一个方向的滚动。

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rel_layout"
    android:layout_width="100dp"
    android:layout_height="wrap_content" 
    android:clipChildren="false"
    android:clipToPadding="false">

<com.app.healthview.BorderedTextView
    android:id="@+id/btvYear1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:background="@color/YearColor1"
    android:maxLines="1"
    android:text="2012" />

<com.app.healthview.BorderedTextView
    android:id="@+id/btvYear2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/btvYear1"
    android:background="@color/YearColor2"
    android:maxLines="1"
    android:text="2013" />

<com.app.healthview.BorderedTextView
    android:id="@+id/btvYear3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/YearColor1"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/btvYear2"
    android:gravity="center"
    android:maxLines="1"
    android:text="2014" />

</RelativeLayout>

然后我在一个函数中初始化视图,该函数在设置内容视图后调用:

public void InitTimeView() {

    year_views = new BorderedTextView[3];
    year_views[0] = (BorderedTextView) findViewById(R.id.btvYear1);
    year_views[1] = (BorderedTextView) findViewById(R.id.btvYear2);
    year_views[2] = (BorderedTextView) findViewById(R.id.btvYear3);

    // Acquire display size
    display = getWindowManager().getDefaultDisplay();
    size = new Point();
    display.getSize(size);
    int year_width = size.x / 2;

    year_views[0].setWidth(year_width);
    year_views[1].setWidth(year_width);
    year_views[2].setWidth(year_width);

    // This is done, because when scrolling, the third view which in the beginning is off-screen, could not be seen
    RelativeLayout relLayout = (RelativeLayout) findViewById(R.id.rel_layout);
    relLayout.getLayoutParams().width = year_width * 4;
    relLayout.invalidate();
}

然后是 onScroll 方法:

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    // intCurrYearMember is public, it stores the view that is next to be moved
    // intRightYearMember; intCurrYearMember is located right to this view.
    switch(intCurrYearMember) {
    case 0:
        intRightYearMember = 2;
    case 1:
        intRightYearMember = 0;
    case 2:
        intRightYearMember = 1;
    }

    // Move the views
    for (TextView textview : year_views) {
        textview.setX(textview.getX() - (distanceX / 2));
    }

    // Check if the view most left is now too far on left, and move it if needed to far right
    if ((year_views[intCurrYearMember].getX() + year_views[intCurrYearMember].getWidth()) <= 0) {
        // Is the problem here perhaps?
        year_views[intCurrYearMember].setX(year_views[intRightYearMember].getRight());
        intPreviousMember = intCurrYearMember;
        if (intCurrYearMember < 2)
            intCurrYearMember++;
        else
            intCurrYearMember = 0;
    }

    return true;
}

正如代码中所示,我的想法是构建一个年份滚动条。如果有人碰巧有一个更好、更有效的想法,我很高兴听到你的建议!

所以我的问题是:为什么文本视图之间存在差距?

4

1 回答 1

0

我根本不建议这样做。在这些事情上使用水平滑动并不是平台的标准使用,当已经有经过测试且漂亮的 Android 组件(例如您可以轻松使用的Pickers )时,为什么还要浪费您的时间来开发它。

水平滑动手势通常是为菜单抽屉、视图分页器或其他功能而保存的。

于 2013-10-17T20:51:45.700 回答