在屏幕外移动另一个textview旁边的textview

时间:2013-10-17 20:34:58

标签: android android-layout relativelayout textview off-screen

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

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

以下是问题截图的链接: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-method:

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;
}

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

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

1 个答案:

答案 0 :(得分:0)

我不建议这样做。对这些东西使用水平滑动不是平台的标准用途,为什么在已经测试过的漂亮的Android组件(例如Pickers)可以轻松使用时,浪费时间来开发它。

通常会为菜单抽屉,查看寻呼机或其他功能保存水平滑动手势。