2

我想显示一个TextView略高于将显示搜索栏当前进度的拇指SeekBar当我们向前和向后移动拇指时TextView,拇指也会随之移动(TextView也应该在拇指上方)。

请提供任何线索,代码片段总是受欢迎的。

4

3 回答 3

10

通过将for设置为,可以更轻松地移动文本paddingTextView

int xPos = ((SeekbarInstance.getRight() - SeekbarInstance.getLeft()) * SeekbarInstance.getProgress()) / SeekbarInstance.getMax();
textViewInstance.setPadding(xPos, 0, 0, 0);
于 2011-04-15T02:21:26.840 回答
3

您的活动布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <!-- Main context -->
    <LinearLayout android:orientation="vertical" 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <SeekBar android:id="@+id/skbSample" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:layout_marginLeft="10dip" 
            android:layout_marginRight="10dip"
            android:max="35">
        </SeekBar>
    </LinearLayout>
        <!-- For display value -->
    <AbsoluteLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView android:text="0" 
            android:id="@+id/txvSeekBarValue" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:textColor="#FFFFFFFF"
            android:background="#FF777777"
            android:visibility = "invisible">
        </TextView>
    </AbsoluteLayout>
</FrameLayout>

在创建时初始化您的控件:

mTxvSeekBarValue = (TextView) this.findViewById(R.id.txvSeekBarValue);
mSkbSample = (SeekBar) this.findViewById(R.id.skbSample);
mSkbSample.setOnTouchListener(new OnTouchListener() {       
        @Override
        public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN)
        {
            ShowSeekValue((int)event.getX(), mTxvSeekBarValue.getTop());
            mTxvSeekBarValue.setVisibility(View.VISIBLE);   
        }
        else if(event.getAction() == MotionEvent.ACTION_MOVE)
        {
            ShowSeekValue((int)event.getX(), mTxvSeekBarValue.getTop());
        }
        else if(event.getAction() == MotionEvent.ACTION_UP)
        {
            mTxvSeekBarValue.setVisibility(View.INVISIBLE);
        }
        return false;
    }
});

函数将移动您的价值:

private void ShowSeekValue(int x, int y)
{
    if(x > 0 && x < mSkbSample.getWidth())
    {
        AbsoluteLayout.LayoutParams lp = new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, x, y);
        mTxvSeekBarValue.setLayoutParams(lp);
    }
}
于 2010-12-09T12:16:19.343 回答
1

找到了更好的方法。源自样本:

mTxvSeekBarValue = (TextView) this.findViewById(R.id.txvSeekBarValue);
mSkbSample = (SeekBar) this.findViewById(R.id.skbSample);
mSkbSample.setOnTouchListener(new OnTouchListener() {       
        @Override
        public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN)
        {
            int progress = mSkbSample.getProgress();
    mTxvSeekBarValue.setText(String.valueOf(progress).toCharArray(), 0, String.valueOf(progress).length());   
        }
        else if(event.getAction() == MotionEvent.ACTION_MOVE)
        {
            int progress = mSkbSample.getProgress();
    mTxvSeekBarValue.setText(String.valueOf(progress).toCharArray(), 0, String.valueOf(progress).length());  
        }
        return false;
    }
});

在那里您不需要任何其他方法,并且 ACTION_UP 事件对结果没有重要影响。

于 2011-03-25T14:41:48.717 回答