как настроить панель поиска - PullRequest
2 голосов
/ 06 октября 2010

Я хочу отобразить TextView чуть больше над большим пальцем SeekBar, который будет отображать текущий ход строки поиска.При перемещении большого пальца вперед и назад TextView также будет перемещаться большим пальцем (TextView также должен быть выше большого пальца).

Пожалуйста, предоставьте любую подсказку, фрагмент кода всегда приветствуется.

Ответы [ 3 ]

10 голосов
/ 15 апреля 2011

Перемещение текста можно сделать еще проще, установив padding для TextView как:

int xPos = ((SeekbarInstance.getRight() - SeekbarInstance.getLeft()) * SeekbarInstance.getProgress()) / SeekbarInstance.getMax();
textViewInstance.setPadding(xPos, 0, 0, 0);
3 голосов
/ 09 декабря 2010

Схема вашей деятельности

<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);
    }
}
1 голос
/ 25 марта 2011

Нашли лучший способ.Получено из примера:

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 не оказывает существенного влияния на результат.

...