2016-10-02 1 views
1

Ich möchte den Wert des aktuellen Fortschrittspunkts in den Daumen einer Android SeekBar zeigen. Dies ist, was ich bisher versucht:Wie zeigt Android SeekBar progressChanged Wert in SeekBar Daumen?

SeekBar progBar = (SeekBar)FindViewById(Resource.Id.seekBar1); 
     progBar.ProgressChanged += (object sender, SeekBar.ProgressChangedEventArgs e) => 
     { 
      if (e.FromUser) 
      { 
       Drawable d = ContextCompat.GetDrawable(this, Resource.Drawable.thumb); 
       Bitmap bitmap = BitmapFactory.DecodeResource(Resources, Resource.Drawable.thumb); 
       Bitmap bmp = bitmap.Copy(Bitmap.Config.Argb8888, true);// this line gives me a System.NullReferenceException: Object reference not set to an instance of an object. error 
       Canvas c = new Canvas(bmp); 
       Canvas c = new Canvas(bmp); 
       string text = Integer.ToString(progBar.Progress); 
       Paint p = new Paint(); 
       p.SetTypeface(Typeface.DefaultBold); 
       p.TextSize = 14; 
       p.Color = Color.White; 
       int width = (int)p.MeasureText(text); 
       int yPos = (int)((c.Height/2) - ((p.Descent() + p.Ascent())/2)); 
       c.DrawText(text, (bmp.Width - width)/2, yPos, p); 
       progBar.SetThumb(new BitmapDrawable(Resources, bmp)); 
      } 
     }; 

Dann, wenn ich die Art der Auslosungs d bekam, es ist ein Gradient Drawable. Ich habe recherchiert, aber ich konnte keine Möglichkeit finden, einen Gradient Drawable in Bitmap umzuwandeln.

Antwort

0
Drawable d = ContextCompat.GetDrawable(this, Resource.Drawable.thumb); 
     Canvas c = new Canvas(); 
     Bitmap bitmap = Bitmap.CreateBitmap(d.IntrinsicWidth, d.IntrinsicHeight, Bitmap.Config.Argb8888); 
     c.SetBitmap(bitmap); 
     d.SetBounds(0, 0, d.IntrinsicWidth, d.IntrinsicHeight); 
     d.Draw(c); 
     //Bitmap bmp = bitmap.Copy(Bitmap.Config.Argb8888, true); 
     string text = Integer.ToString(progress) + "%"; 
     Paint p = new Paint(); 
     p.SetTypeface(Typeface.CreateFromAsset(Assets, "fonts/Brandon_bld.otf")); 
     p.TextSize = 18; 
     p.Color = Color.White; 
     int width = (int)p.MeasureText(text); 
     int yPos = (int)((c.Height/2) - ((p.Descent() + p.Ascent())/2)); 
     c.DrawText(text, (bitmap.Width - width)/2, yPos, p); 
     progBar.SetThumb(new BitmapDrawable(Resources, bitmap)); 

die Leinwand mit der Bitmap erstellen arbeitete