我正在编写一个应用程序,它看起来像这样:
如何看到顶部有SeekBar,下面是HorizontalScrolView中的几个按钮。我想使用SeekBar滚动按钮,这现在工作正常,但我不能关闭滚动View(draginng屏幕)的默认方式。我在论坛上找到了similat主题:
但问题是,这种方式锁定整个ScrollView并且我无法通过seekBar和默认方式使用它 - 也许我做错了(我在链接中做了同样的事情,即使我有mScrollable参数中为TRUE)。第二个问题是我的按钮(有fill_parent高度参数)非常小。
问题:以默认方式锁定滚动视图并使用SeekBar执行此操作有什么好方法吗?
我的代码(默认为HorizontalScrollView):
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>
答案 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高度 参数)真的很小。
请参阅上面的布局文件。