1

J'ai une vue avec plusieurs barres de recherche verticales. Je dessine du texte sur le pouce et je souhaite afficher une zone de texte flottante au-dessus du pouce pendant que la progression est en train de changer.Barre de recherche verticale Texte flottant Édition

Nous sommes en mesure d'afficher le texte sur le pouce qui flotte pendant que la progression change. OnStopTracking/lors de la suppression du doigt du texte flottant au pouce ne doit pas être visible.

J'ai ajouté seekbar dynamiquement. S'il vous plaît trouver une capture d'écran ci-joint pour savoir comment je veux mettre en œuvre.

Jetez un oeil à code:

mise en œuvre de plusieurs 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); 
    } 

Voici ce que nous avons tenté d'obtenir l'affichage du texte flottant au-dessus du pouce:

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); 
     } 
    }); 

La question nous sommes confrontés est onStopTrackingTouch n'est pas appelé et à cause de cela le texte de progression ne se cache pas. Nous n'obtenons aucun statut dans ACTION_CANCEL dans le programme d'écoute onTouchEvent.

J'ai pris l'aide du lien pour le pouce et la barre de recherche verticale: [lien de pouce et canvas.rotate ajouté (-90); canvas.translate (-getHeight(), 0);] pour seekbar vertical 1

enter image description here

+0

Je veux ajouter du texte flottant au-dessus du pouce. –

Répondre

1

Il semble que vous avez étendu la classe SeekBar et a créé un SeekBar personnalisé, basé sur l'image que vous avez partagé. J'ai fait face au même problème une fois avec une telle exigence.

La solution pour cela est que vous pouvez prendre un drapeau boolean et dessiner le texte sur la toile au-dessus du pouce en ajoutant une valeur supplémentaire à la valeur que vous avez passée au texte dessiné sur le pouce.

Vous peut activer la valeur boolean en ajoutant la fonction ci-dessous

showPopup est la valeur boolean. la fonction onDraw sera comme ci-dessous

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

Merci @mANDROID –