Pequeño contador de Android junto a un botón

Me gustaría añadir un pequeño contador junto a un botón para mostrar la cantidad restante de algunos elementos, por ejemplo, el número restante de consejos restantes no utilizados. El diseño específico sería como se muestra:

introduzca la descripción de la imagen aquí

Pregunta:

He investigado la web y he encontrado que algunos dicen que utilizar diferentes imágenes para cada cantidad. Sin embargo, ¿cómo podría resolverse si la cantidad puede ser de hasta 100? ¿Realmente necesario dibujar tal fuera?

Estoy pensando en pegar 2 botones juntos en un RelativeLayout tal manera que cuando el usuario pulsa el botón inferior, el botón superior contará hacia arriba y hacia abajo y setText sí, pero hay algunas mejores soluciones o importaciones?

Editar:

Gracias Rupesh por sus códigos y consejos! He implementado lo siguiente. Sin embargo, ¿sabes cómo mover el círculo rojo textview más a la derecha? y el 20 no se puede mostrar adecuadamente en el círculo rojo también …

introduzca la descripción de la imagen aquí

Código:

 <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" > <Button android:id="@+id/button_tip" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginBottom="1dp" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:layout_marginTop="5dp" android:background="@drawable/orange_btn" android:onClick="button_tip_click" android:text="Hello" /> <TextView android:layout_width="15dp" android:layout_height="15dp" android:layout_gravity="top|right" android:background="@drawable/red_circle_btn" android:gravity="center" android:text="20" android:textColor="@color/white" android:textSize="8sp" android:textStyle="bold" /> </FrameLayout> 

set El fondo del botón Drawable a un Drawable de encargo como éste:

introduzca la descripción de la imagen aquí

 public class DecoratedTextViewDrawable extends LayerDrawable { private int mCnt = 0; private Paint mPaint; private TextView mParent; private ColorStateList mColors; private Rect mBounds; public DecoratedTextViewDrawable(TextView tv, Drawable[] layers, int cnt) { super(layers); mParent = tv; mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setTextAlign(Align.CENTER); mPaint.setTextSize(tv.getTextSize()); mPaint.setTypeface(Typeface.DEFAULT_BOLD); int[][] states = { {android.R.attr.state_pressed}, {android.R.attr.state_focused}, {} }; int[] colors = { 0xff0000aa, 0xff880000, 0xff00aa00 }; mColors = new ColorStateList(states, colors); mBounds = new Rect(); setCnt(cnt); } public void setCnt(int cnt) { mCnt = cnt; String s = Integer.toString(cnt); mPaint.getTextBounds(s, 0, s.length(), mBounds); invalidateSelf(); } @Override protected boolean onStateChange(int[] state) { invalidateSelf(); return super.onStateChange(state); } @Override public boolean isStateful() { return true; } @Override public void draw(Canvas canvas) { super.draw(canvas); float x = mPaint.getTextSize() * 1.5f; float r = mPaint.getTextSize() * 0.9f; int base = mParent.getBaseline(); int[] stateSet = getState(); // Log.d(TAG, "draw " + StateSet.dump(stateSet)); int color = mColors.getColorForState(stateSet, 0xff000000); mPaint.setColor(color); canvas.drawCircle(x, base + mBounds.top + mBounds.height() / 2, r, mPaint); mPaint.setColor(0xffeeeeee); canvas.drawText(Integer.toString(mCnt), x, base, mPaint); } } 

Puedes usarlo así:

 // Activity.onCreate method LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); int NUM = 5; final int[] cnt = new int[NUM]; Random r = new Random(); for (int i = 0; i < NUM; i++) { cnt[i] = r.nextInt(20); Button b = new Button(this); b.setText("Click me"); b.setTextSize(18); b.setTag(i); Drawable[] layers = {b.getBackground()}; Drawable d = new DecoratedTextViewDrawable(b, layers, cnt[i]); b.setBackgroundDrawable(d); OnClickListener l = new OnClickListener() { @Override public void onClick(View v) { DecoratedTextViewDrawable d = (DecoratedTextViewDrawable) v.getBackground(); int idx = (Integer) v.getTag(); d.setCnt(++cnt[idx]); } }; b.setOnClickListener(l); ll.addView(b); } setContentView(ll); 

usar esto – y seguir actualizando el texto textviews con el conteo

  <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/your_phone_call_image" android:gravity="center" android:scaletype="matrix"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" android:padding="5dp" android:gravity="top|right" <!--this is important--> android:background="@drawable/your_counter_red_background"/> </FrameLayout> 

Le sugiero que puede utilizar un FrameLayout. 1.- puedes usar 2 imágenes una para tu botón, una para el pequeño círculo y usar una textview para los números … 2.- puedes usar una imagen para tu botón, y crear un degradado para el pequeño círculo y un vista de texto..

Para el frameLayout vea: http://developer.android.com/reference/android/widget/FrameLayout.html Para el gradiente, vea: Cómo hacer el fondo de degradado en android .

  • Botón de ondulación de androide con fondo
  • Cambia dinámicamente el ancho de un botón en Android
  • Cómo ir sobre varios botones y OnClickListeners
  • ¿Cómo hacer que una parte del texto haga clic como botón en Android?
  • ¿Posible superponer un botón encima de otro?
  • Dos texto en el botón, el título y el subtítulo
  • Cómo cambiar el color de texto del botón de Android de forma global en el tema
  • Color de fondo del botón de Android
  • Android: cómo animar una transición de actividad cuando se pulsa el botón de retroceso predeterminado
  • Establezca OnClickListener apagado y luego en
  • Scale2d escala de botón con libgdx
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.