0

私はアプリケーションを書いていますが、次のようになります。

写真1

上に SeekBar があり、下の Horizo​​ntalScrollView にいくつかのボタンがあることがわかります。SeekBar を使用してボタンをスクロールしたいのですが、これで問題なく動作しますが、ビューをスクロールするデフォルトの方法 (画面をドラッグする) をオフにすることはできません。フォーラムで同様のトピックを見つけました:

類似のトピック

しかし、問題は、この方法でScrollView全体をロックし、seekBarとデフォルトの方法で使用できないことです-おそらく私は何か間違ったことをしています(リンクと同じようにしましたが、mScrollableでTRUEを持っていても、これはうまくいきません)パラメータ)。2 番目の問題は、(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");

    }

アクティビティ_メイン:

 <?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>
4

1 に答える 1

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をいじらずにタッチ イベントを「吸収」してみてください。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;
        }
    });

2 番目の問題は、(fill_parent の高さパラメーターを持つ) ボタンが非常に小さいことです。

上記のレイアウト ファイルを参照してください。

于 2012-12-09T16:55:49.610 に答える