1

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

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

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

Взгляните на код:

Реализация множественного 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);] для вертикального SeekBar 1

enter image description here

+0

Я хочу добавить плавающий текст над большим пальцем. –

ответ

1

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

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

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

Где 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); 
+0

Спасибо @mANDROID –