锁定水平ScrollView - Android

时间:2012-12-09 16:29:48

标签: android locking horizontal-scrolling

我正在编写一个应用程序,它看起来像这样:

picture 1

如何看到顶部有SeekBar,下面是Horizo​​ntalScrolView中的几个按钮。我想使用SeekBar滚动按钮,这现在工作正常,但我不能关闭滚动View(draginng屏幕)的默认方式。我在论坛上找到了similat主题:

Similar Topic

但问题是,这种方式锁定整个ScrollView并且我无法通过seekBar和默认方式使用它 - 也许我做错了(我在链接中做了同样的事情,即使我有mScrollable参数中为TRUE)。第二个问题是我的按钮(有fill_parent高度参数)非常小。

问题:以默认方式锁定滚动视图并使用SeekBar执行此操作有什么好方法吗?

我的代码(默认为Horizo​​ntalScrollView):

 public class MainActivity extends Activity implements SeekBar.OnSeekBarChangeListener {

    static private String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        SeekBar seek = (SeekBar) findViewById(R.id.seekBar);
        final HorizontalScrollView hsv = (HorizontalScrollView)findViewById(R.id.hsv);      

        seek.setMax(948);
        seek.setProgress(474);
        seek.setOnSeekBarChangeListener(this);
        hsv.post(new Runnable() {
            @Override
            public void run() {
                hsv.scrollTo(474, 0);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
        HorizontalScrollView hsv = (HorizontalScrollView)findViewById(R.id.hsv);
        hsv.scrollTo(progress, 0);
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        Log.d(TAG, "Tracking on");
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        Log.d(TAG, "Tracking off");

    }

activity_main:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#0A0A0A"
    android:orientation="vertical" >

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <HorizontalScrollView
        android:id="@+id/hsv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scrollbars="none" >

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:orientation="horizontal" >

           <!-- BUTTONS CODE - NOT IMPORTANT --> 

        </RelativeLayout>
    </HorizontalScrollView>

</LinearLayout>

1 个答案:

答案 0 :(得分:1)

  

有一种以默认方式锁定滚动视图并使用的好方法   SeekBar这样做??

修改

解决方案似乎更简单,覆盖HorizontalScrollView类并通过视图传递触摸事件:

public class MyHScroll extends HorizontalScrollView {

    // the constructors

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return false;
    }

}

在布局中使用此类而不是默认的HorizontallScrollView

<com.your.package.MyHScroll
    android:id="@+id/hsv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scrollbars="none" >

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:orientation="horizontal" >

       <!-- BUTTONS CODE - NOT IMPORTANT --> 

    </RelativeLayout>
</com.your.package.MyHScroll>

<小时/> 尝试在HorizontalScrollView顶部放置叠加视图,以吸收&#34;触摸事件而不会弄乱HorizontalScrollView本身:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#0A0A0A"
    android:orientation="vertical" >

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <FrameLayout android:layout_width="wrap_content"
        android:layout_height="fill_parent">

    <HorizontalScrollView
        android:id="@+id/hsv"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:scrollbars="none" >

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:orientation="horizontal" >

           <!-- BUTTONS CODE - NOT IMPORTANT --> 

        </RelativeLayout>
    </HorizontalScrollView>

    <View android:id="@+id/overlay" android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    </FrameLayout

</LinearLayout>

然后在OnTouchListener方法中为叠加小部件添加onCreate以进一步阻止触摸事件:

findViewById(R.id.overlay).setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });
  

第二个问题是我的按钮(具有fill_parent高度   参数)真的很小。

请参阅上面的布局文件。