无法处理Horizo​​ntal ScrollView的ScrollBar上的点击

时间:2014-05-28 05:17:34

标签: android

我在水平滚动视图中有一个网格布局,我正在尝试为滚动视图实现自定义滚动条,到目前为止我能够自定义滚动条的UI [拇指和搜索条]也设置可见性常驻。但问题是我被困在处理scrollview滚动条上的事件。例如。如果用户点击ScrollView之间的滚动条应该滚动到50%,依此类推。如果点击第1个qurater滚动视图应滚动25%。

如果我创建自己的搜索栏并将其绑定到滚动视图,它非常简单,它还提供了自己的方法和单击事件并可以创建对象。但我想用ScrollView的滑块来做。如何处理滚动视图的滚动条单击,我可以创建ScrollView类的对象。但它如何控制搜索条件?对于Horizo​​ntall滚动视图,我没有onseekbarchangelistner,也没有返回任何achild视图或滚动条视图。它也是搜索栏无法点击的。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbarThumbHorizontal="@drawable/scrollbar_horizontal_thumb"
        android:scrollbarTrackHorizontal="@drawable/scrollbar_horizontal_track"
        android:visibility="visible" 
        android:fadeScrollbars="false"
        android:id="@+id/scrollView">

        <android.support.v7.widget.GridLayout
            android:id="@+id/grid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:columnCount="18"
            android:orientation="horizontal"
            android:rowCount="1" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_blue_bright"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/darker_gray"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_green_light"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_blue_bright"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/darker_gray"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_green_light"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_blue_bright"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/darker_gray"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_blue_bright"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/darker_gray"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_green_light"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_blue_bright"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/darker_gray"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_green_light"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_blue_bright"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/darker_gray"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_green_light"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_blue_bright"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/darker_gray"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_green_light"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_blue_bright"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/darker_gray"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/holo_green_light"
                android:padding="10dp"
                android:text="Hi"
                android:textSize="16sp" />
        </android.support.v7.widget.GridLayout>
    </HorizontalScrollView>

</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

抱歉发布此答案太晚了:

要做的是:扩展水平滚动视图并覆盖onScrollChanged上的方法,你得到两个坐标x1和x2。只需传递x1,它是实时值,表示x轴已经滚动了多少,我们的搜索条setProgress(x1)方法。确保你首先设置seebar的最大值[setMax()],它等于scrollView的最大可滚动长度。

public class mHorizontalScrollView extends HorizontalScrollView{
    private float   progress =  0.0f;
    private SeekBar mSeekBar = null;
    private MyActivityClass  mObj    = null;
    private float xMax       =  0.0f;



    public mHorizontalScrollView(Context context, SeekBar sBar) 
    {
        super(context);
        mObj            =   (MyActivityClass) context; //or just use a Static reference
        mSeekBar        =   sBar;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldX, int oldY) {
        // TODO Auto-generated method stub
        int myX         =   x;
        if(xMax == 0)
        {
         xMax = mObj.getMaxScrollWidth(); //Choose Your own Scrollable width or length
         mSeekBar.setMax(Math.round(xMax));
        }

         mSeekBar.setProgress(myX); 
         super.onScrollChanged(x, y, oldX, oldY);
    }

}

它完美无缺。现在实现它反向滚动滚动条和Horizo​​ntallScroll视图滚动应滚动到适当的Syncwith搜索栏:

在主Activity类中使用以下代码:

    seek_bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) 
        {
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar)
        {
        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {

            int currScrollPosX  =   progress;
            mHSCV.scrollTo(progress , 0);
           // mHSCV is object of mHorizontalScrollView Class

    });
}

问候。