Вертикальный Seekbar Плавающий текст Выпуск

У меня есть представление с несколькими вертикальной панели поиска. Я рисую текст на большом пальце и хочу отображать плавающее текстовое поле над большим пальцем, когда прогресс меняется.

Мы можем отображать текст в верхней части большого пальца, который плавает при изменении прогресса. OnStopTracking/on при снятии пальца с плавающего текста не должен быть виден.

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

Посмотрите на код:

Реализация множественной панели поиска:

  for (int i = 0; i <= undertimearray.length - 1; i++) {
        LayoutInflater layoutInfralte = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View inflatedView = layoutInfralte.inflate(R.layout.element_sliderandtext, ll_rightside, false);
        TextView submittedByTextView = (TextView) inflatedView.findViewById(R.id.txt_underseekbar);
        submittedByTextView.setText(undertimearray[i]);
        //rl_seekbarandtext=(RelativeLayout)inflatedView. findViewById(R.id.rl_seekbarandtext);
        myseekbar = (TextThumbSeekBar) inflatedView.findViewById(R.id.myseekbar);
        tvProgress = (TextView) inflatedView.findViewById(R.id.tv_progress);
        myseekbar.setMax(50);
        ll_tempvalues.post(new Runnable() {
            @Override
            public void run() {
                height = ll_tempvalues.getHeight();
             //   Log.e("TAG", "TAG" + "=height=" + height);
            }
        });
        ll_rightside.addView(inflatedView);
    }

Ниже приведено то, что мы пытались добиться отображения плавающего текста над большим пальцем:

 myseekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            final RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            p.addRule(RelativeLayout.ALIGN_RIGHT, seekBar.getId());
            Rect thumbRect = myseekbar.getSeekBarThumb().getBounds();
            Log.v("TAG", "ThumbRect Region : " + thumbRect.centerX());
            p.setMargins(0, thumbRect.centerY() *12, 0, 0);
           // tvProgress.setPadding(thumbRect.centerY() * 2, 0, 0, 0);
            tvProgress.setVisibility(View.VISIBLE);
            tvProgress.setLayoutParams(p);
            //tvProgress.setY(progress * 10);
            tvProgress.setText(String.valueOf(progress));
            tvProgress.invalidate();
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar)
        {
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            tvProgress.setVisibility(View.GONE);
        }
    });

Проблема, с которой мы сталкиваемся, заключается в том, что onStopTrackingTouch не вызывается, и поэтому текст прогресса не скрывается. Мы также не получаем никакого статуса в ACTION_CANCEL внутри слушателя onTouchEvent.

Я воспользовался ссылкой для большого пальца и вертикальной панели поиска: [Thumb link и добавил canvas.rotate(-90); canvas.translate(-getHeight(), 0);] для вертикальной панели поиска 1

введите описание изображения здесь

1 ответ

Решение

Похоже, вы расширили класс SeekBar и создали собственный SeekBar на основе изображения, которым вы поделились. Я сталкивался с той же проблемой однажды с таким требованием.

Решение для этого вы можете взять boolean Отметьте и нарисуйте текст на холсте над большим пальцем, добавив некоторое дополнительное значение к значению, которое вы передали тексту, который рисуется на большом пальце.

Вы можете переключать boolean значение, добавив ниже функцию

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    boolean ret = super.dispatchTouchEvent(event);
    showPopup = event.getAction() != MotionEvent.ACTION_UP;
    return ret;
}

куда showPopup это boolean значение. функция onDraw будет как показано ниже

    String progressText = String.valueOf(getProgress() + 60);
    Rect bounds = new Rect();
    mTextPaint.getTextBounds(progressText, 0, progressText.length(), bounds);
    int leftPadding = getPaddingLeft() - getThumbOffset();
    float progressRatio = (float) getProgress() / getMax();
    float thumbOffset = mThumbSize * (.4f - progressRatio);
    float thumbX = progressRatio * getHeight() + leftPadding + thumbOffset;
    float thumbY = getWidth() / 2.05f + bounds.width() / 2.15f;

    canvas.drawText(progressText, thumbX - getResources().getDimension(R.dimen.s_5sp), thumbY + getResources().getDimension(R.dimen.s_5sp), mTextPaint);//Text on thumb
    if (showPopup)//Text above thumb position
        canvas.drawText(progressText, thumbX - getResources().getDimension(R.dimen.s_5sp), (thumbY + getResources().getDimension(R.dimen.s_5sp) - 40), mTextPaint);
Другие вопросы по тегам