delphi
import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; public class RepeatSignal extends ImageView { private static int repe = 0; private static Runnable Task; public RepeatSignal(Context context, AttributeSet attrs) { super(context, attrs); repe = 0; } public void run(int Repe, final int Interval) { boolean runnig = repe>0; synchronized (this) {repe = Repe;} if(runnig) return; Task = new Runnable() { boolean p = isPressed(); @Override public void run() { setPressed(p ^= true); if (!p) repe--; if (repe >0) postDelayed(this, Interval); } }; postDelayed(Task, Interval); } };
Por ejemplo, deseando que nuestra señal tenga el aspecto de un led, podemos colocar el control en nuestro layout así:
delphi
<com.escafandra.miprograma.RepeatSignal android:id="@+id/repeatSignal1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="6" android:paddingLeft="10dp" android:background="#00000000" android:scaleType="center" android:src="@drawable/led_selector" />
El selector, led_selector.xml:
delphi
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/led_off" android:state_enabled="false"/> <item android:drawable="@drawable/led_on" android:state_pressed="true"/> </selector>
con los dos estados del led:
led_off.xml
delphi
<?xml version="1.0" encoding="UTF-8" ?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <gradient android:type="radial" android:gradientRadius="25" android:centerX="40%" android:centerY="40%" android:startColor="#BABABA" android:endColor="#101010" /> <size android:width="20dp" android:height="20dp"/> <padding android:left="8dp" android:top="8dp" android:right="8dp" android:bottom="8dp" /> </shape>
led_on.xml:
delphi
<?xml version="1.0" encoding="UTF-8" ?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <gradient android:type="radial" android:gradientRadius="20" android:centerX="40%" android:centerY="40%" android:startColor="#0AFF0A" android:endColor="#008800" /> <size android:width="20dp" android:height="20dp"/> <padding android:left="8dp" android:top="8dp" android:right="8dp" android:bottom="8dp" /> </shape>
En realidad, como el control se deriva de un ImageView, podemos usar igualmente imágenes o los drawnables que deseemos.
Saludos.