在水平滚动视图中单次滑动滚动一定量

时间:2017-01-17 06:49:26

标签: android android-layout horizontalscrollview

我有一个水平滚动视图,里面有几个文本视图。在顶部布局上有一个指针,并且在指针下面的不同文本视图触发它们各自的片段。现在它可以自由滚动,你可以在2个文本视图之间停止它。我想要的是每次向左或向右滑动时滚动一定量,这将导致文本视图位于上方指针的中心。

我把它们放在相对布局中,这里是xml

  <LinearLayout
    android:id="@+id/ic_layout"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="20dp">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="20dp"
        android:src="@drawable/arrow"/>

</LinearLayout>

<HorizontalScrollView
    android:id="@+id/HorizontalScrollView1"
    android:layout_width="300dp"
    android:layout_height="75dp"
    android:background="#FFF"
    android:scrollbars="none"
    android:fillViewport="false"
    android:layout_below="@+id/ic_layout"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginLeft="100dp"
    android:layout_marginRight="100dp">

    <LinearLayout
        android:id="@+id/imgLayout1"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:orientation="horizontal"
        android:gravity="center">

        <TextView
            android:layout_width="130dp"
            android:layout_height="40dp"
            android:paddingLeft="120dp"
            android:paddingRight="10dp" />

        <TextView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="Random Crap1"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"/>
        <TextView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="Random Crap2"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"/>
        <TextView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="Random Crap3"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"/>

        <TextView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="Random Crap4"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"/>

        <TextView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="Random Crap5"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"/>

        <TextView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="Random Crap6"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"/>

        <TextView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="Random Crap7"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"/>

        <TextView
            android:layout_width="70dp"
            android:layout_height="40dp"
            android:paddingLeft="10dp"
            android:paddingRight="70dp"/>


    </LinearLayout>


</HorizontalScrollView>

2 个答案:

答案 0 :(得分:0)

关注:

要将Horizo​​ntal ScrollView滚动到特定金额,请使用以下代码:

final HorizontalScrollView YourHorizontalScrollView = (HorizontalScrollView) findViewById(R.id.YourHorizontalScrollView);

YourHorizontalScrollView.post(new Runnable() {

    @Override
    public void run() {
        final TextView YourTextView = (TextView) findViewById(R.id.yourTextView);
        int scrollTo = 0;
        final int count = ((LinearLayout) YourHorizontalScrollView.getChildAt(0))
                .getChildCount();
        for (int i = 0; i < count; i++) {
            final View child = ((LinearLayout) YourHorizontalScrollView.getChildAt(0))
                    .getChildAt(i);                 
            if (child != yourTextView) {
                scrollTo += child.getWidth();
            } else {
                break;
            }
        }
        YourHorizontalScrollView.scrollTo(scrollTo, 0);
    }

});

希望这会对你有所帮助。

答案 1 :(得分:0)

你应该使用ViewPager而不是水平滚动,每次都适用于固定滚动。 修复ViewPager的高度以获得更好的体验。 使用ViewPager的自定义适配器

public class CustomViewPagerImageAdapterPC extends PagerAdapter {

@Override
public float getPageWidth(int position) {
    // TODO Auto-generated method stub
    //return super.getPageWidth(position);
    return 0.4f;
}