我的相对布局包含三个文本视图,每个文本视图的宽度都是屏幕的半宽。我希望用户能够使用滚动手势并将这些文本视图移动到一起,如果位于最左侧的文本视图离开屏幕,则会将其移动到第三个文本视图旁边的最右侧。所以我想创建一种无尽的卷轴系统。
但是,使用下面的代码会导致滚动时视图之间出现间隙,我认为间隙宽度可以依赖滚动速度。
以下是问题截图的链接: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;
}
正如代码中所示,我的想法是构建一个年份滚动条。如果有人想要有一个更好,更有效的想法,我很高兴听到你的建议!
所以我的问题是:为什么文本视图之间存在差距?
答案 0 :(得分:0)
我不建议这样做。对这些东西使用水平滑动不是平台的标准用途,为什么在已经测试过的漂亮的Android组件(例如Pickers)可以轻松使用时,浪费时间来开发它。
通常会为菜单抽屉,查看寻呼机或其他功能保存水平滑动手势。