1

私は複数の垂直シークバーを持つビューを持っています。私は親指でテキストを描画しており、進行状況が変化している間に親指の上にフローティングテキストボックスを表示したい。Vertical Seekbarフローティングテキスト問題

進行状況が変化している間に浮動する親指の上にテキストを表示することができます。 OnStopTracking /親指浮動テキストから指を離して表示することはできません。

シークバーを動的に追加しました。私がどのように実装したいかについて、添付のスクリーンショットを見てください。

コードを見てみましょう:複数のシークバーの

実装:以下

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が呼び出されていないことに直面しており、このために進捗テキストは隠れていません。また、onTouchEventリスナー内のACTION_CANCELで状態を取得していません。

親指と垂直シークバーのリンクを利用しました。 [親指のリンクと追加されたcanvas.rotate(-90); canvas.translate(-getHeight()、0);垂直シークバー用] 1

enter image description here

+0

親指の上に浮動テキストを追加したいと思います。 –

答えて

1

あなたはシークバークラスを拡張し、あなたが共有している画像をもとに、カスタムシークバーを作成しているように思えます。私はそのような要求をして一度同じ問題に直面しました。

この解決方法は、booleanフラグを使用し、サムの上に描画されるテキストに渡された値に余分な値を追加することで、親指の上のキャンバスにテキストを描画することです。

あなたは機能

showPopupboolean値である

の下に追加して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 –