Ir al contenido


Foto

Una de Android, RepeatSignal


  • Por favor identifícate para responder
No hay respuestas en este tema

#1 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 29 noviembre 2013 - 11:13

Si queremos conseguir que nuestro dispositivo android muestre una señal intermitente con una cadencia determinada y un número de veces concreto, este código puede ser la solución al problema:



delphi
  1. import android.content.Context;
  2. import android.util.AttributeSet;
  3. import android.widget.ImageView;
  4.  
  5. public class RepeatSignal extends ImageView {
  6.   private static int repe = 0;
  7.   private static Runnable Task;
  8.  
  9.   public RepeatSignal(Context context, AttributeSet attrs) {
  10.     super(context, attrs);
  11.     repe = 0;
  12.   }
  13.  
  14.   public void run(int Repe, final int Interval) {
  15.     boolean runnig = repe>0;
  16.     synchronized (this) {repe = Repe;}
  17.     if(runnig) return;
  18.  
  19.     Task = new Runnable() {
  20.       boolean p = isPressed();
  21.  
  22.       @Override
  23.       public void run() {
  24.         setPressed(p ^= true);
  25.         if (!p)
  26.           repe--;
  27.         if (repe >0)
  28.           postDelayed(this, Interval);       
  29.       }
  30.     };
  31.     postDelayed(Task, Interval);
  32.   }
  33. };



Por ejemplo, deseando que nuestra señal tenga el aspecto de un led, podemos colocar el control en nuestro layout así:


delphi
  1. <com.escafandra.miprograma.RepeatSignal
  2.     android:id="@+id/repeatSignal1"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:layout_weight="6"
  6.     android:paddingLeft="10dp"
  7.     android:background="#00000000"
  8.     android:scaleType="center"
  9.     android:src="@drawable/led_selector" />



El selector, led_selector.xml:


delphi
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android" >
  3.   <item android:drawable="@drawable/led_off" android:state_enabled="false"/>
  4.   <item android:drawable="@drawable/led_on" android:state_pressed="true"/>
  5. </selector>



con los dos estados del led:
led_off.xml


delphi
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
  3.     <gradient
  4.         android:type="radial"
  5.         android:gradientRadius="25"
  6.         android:centerX="40%"
  7.         android:centerY="40%"
  8.         android:startColor="#BABABA"
  9.         android:endColor="#101010" />
  10.  
  11.     <size
  12.     android:width="20dp"
  13.     android:height="20dp"/>
  14.     <padding
  15.         android:left="8dp"
  16.         android:top="8dp"
  17.         android:right="8dp"
  18.         android:bottom="8dp" />
  19. </shape>


led_on.xml:


delphi
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
  3.     <gradient
  4.         android:type="radial"
  5.         android:gradientRadius="20"
  6.         android:centerX="40%"
  7.         android:centerY="40%"
  8.         android:startColor="#0AFF0A"
  9.         android:endColor="#008800" />
  10.     <size
  11.     android:width="20dp"
  12.     android:height="20dp"/>
  13.     <padding
  14.         android:left="8dp"
  15.         android:top="8dp"
  16.         android:right="8dp"
  17.         android:bottom="8dp" />
  18. </shape>



En realidad, como el control se deriva de un ImageView, podemos usar igualmente imágenes o los drawnables que deseemos.


Saludos.
  • 0




IP.Board spam blocked by CleanTalk.