Android 无法在scrollview中拖动seekbar

Android 无法在scrollview中拖动seekbar,android,scrollview,seekbar,Android,Scrollview,Seekbar,我很抱歉,如果这个问题已经在其他地方得到了回答-我找不到有同样问题的人 我在嵌套滚动视图中的RelativeLayout中添加了一个SeekBar。但是,我无法拖动seekbar的拇指。我可以沿其路径单击以更改其值,但不能拖动它。任何帮助都将不胜感激 我的XML看起来像: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/containerView" and

我很抱歉,如果这个问题已经在其他地方得到了回答-我找不到有同样问题的人

我在嵌套滚动视图中的RelativeLayout中添加了一个SeekBar。但是,我无法拖动seekbar的拇指。我可以沿其路径单击以更改其值,但不能拖动它。任何帮助都将不胜感激

我的XML看起来像:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/containerView"
android:background="@android:color/transparent"
android:padding="0dip"
android:layout_margin="0dip"
android:layout_width="fill_parent"
android:layout_height="fill_parent">


<ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scrollbarStyle="insideOverlay"
        android:id="@+id/scrollView" android:layout_alignParentTop="true" android:layout_alignParentLeft="true"
        android:fillViewport="true">
    <HorizontalScrollView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:scrollbarStyle="insideInset"
            android:id="@+id/horizontalScrollView" android:fillViewport="true">
        <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:id="@+id/scrollContainer">
        </RelativeLayout>
    </HorizontalScrollView>
</ScrollView>
</RelativeLayout>

我的Java是:

SeekBar thisElement = new SeekBar(getActivity());
thisElement.setEnabled(true);
thisElement.setLayoutParams(lp);
thisElement.setAlpha(alphaVal);
thisElement.setMinimumHeight(elementHeight);
final int min = Integer.parseInt(getJsonPropertyValue(tmpJson, "elementSliderMinimum", "0"));
int max = Integer.parseInt(getJsonPropertyValue(tmpJson, "elementSliderMaximum", "100"));
int def = Integer.parseInt(getJsonPropertyValue(tmpJson, "elementSliderDefault", "50"));
thisElement.setMax(max - min);
thisElement.setProgress(def - min);
thisElement.setTag(elementCounter);
thisElement.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        String msg = "onTouch:" + v.getClass().toString();
        Log.w("ZZ",msg);
        return false;
    }
});
thisElement.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        String elementSliderAction = getJsonPropertyValue(tmpJson, "elementSliderAction", "");
        if (elementSliderAction.equalsIgnoreCase("changeLabel")) {
            int labelNumber = -1;
            String elementSliderLabel = getJsonPropertyValue(tmpJson, "elementSliderLabel", "");
            for (int j=0; j<childItems.size(); j++) {
                BT_item tmpElement = childItems.get(j);
                if (tmpElement.getItemId().equalsIgnoreCase(elementSliderLabel)) {
                    TextView labelToChange = (TextView)scrollContainer.findViewWithTag(j+1000);
                    String newVal = "" + (progress - min);
                    labelToChange.setText(newVal);
                }
            }
        }
        else if (elementSliderAction.equalsIgnoreCase("saveToPref")) {
            String elementSliderPrefName = getJsonPropertyValue(tmpJson, "elementSliderPrefName", "");
            String newVal = "" + (progress - min);
            setPrefString(elementSliderPrefName, newVal);
        }

    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
});
scrollContainer.addView(thisElement);
SeekBar thismelement=newseekbar(getActivity());
thisElement.setEnabled(true);
thisElement.setLayoutParams(lp);
这个元素。setAlpha(alphaVal);
此元素。设置最小高度(元素高度);
final int min=Integer.parseInt(getJsonPropertyValue(tmpJson,“elementsliderminium”,“0”);
int max=Integer.parseInt(getJsonPropertyValue(tmpJson,“elementSliderMaximum”,“100”);
int def=Integer.parseInt(getJsonPropertyValue(tmpJson,“elementSliderDefault”,“50”);
设置最大值(最大-最小值);
设置进度(def-min);
setTag(elementCounter);
thisElement.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
字符串msg=“onTouch:+v.getClass().toString();
Log.w(“ZZ”,msg);
返回false;
}
});
thisElement.setOnSeekBarChangeListener(新的SeekBar.OnSeekBarChangeListener(){
@凌驾
public void onProgressChanged(SeekBar-SeekBar、int-progress、boolean-fromUser){
字符串elementSliderAction=getJsonPropertyValue(tmpJson,“elementSliderAction”,“”);
if(elementSliderAction.equalsIgnoreCase(“changeLabel”)){
int labelNumber=-1;
字符串elementSliderLabel=getJsonPropertyValue(tmpJson,“elementSliderLabel”,“”);

对于(int j=0;j您可以使用以下代码

thisElement.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
        scrolview1.setOverScrollMode(ScrollView.OVER_SCROLL_NEVER);
        return false;
    }
});
它会对你有用的

试试这个


不幸的是,这对我没有任何影响。
thisElement.setOnTouchListener(new SeekBar.OnTouchListener() 
    {
        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {
            int action = event.getAction();
            switch (action) 
            {
            case MotionEvent.ACTION_DOWN:
                // Disallow ScrollView to intercept touch events.
                v.getParent().requestDisallowInterceptTouchEvent(true);
                break;

            case MotionEvent.ACTION_UP:
                // Allow ScrollView to intercept touch events.
                v.getParent().requestDisallowInterceptTouchEvent(false);
                break;
            }

            // Handle Seekbar touch events.
            v.onTouchEvent(event);
            return true;
        }
    });