Android 特效View第三弹之闪烁View
Android 特效View第三弹之闪烁View
<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" > <com.example.empty.FlickerTextView android:id="@+id/flicker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|left" android:text="Happy" android:textColor="#00FF00" android:textSize="24dp" /> <com.example.empty.FlickerText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:alpha="1" android:text="Today" android:textColor="#0000FF" android:textSize="24dp" /> <com.example.empty.FlikerImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/ic_launcher"/> </FrameLayout>
package com.example.empty; import java.util.Timer; import java.util.TimerTask; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.widget.TextView; public class FlickerTextView extends TextView{ boolean change = false; private Handler handler = null; public FlickerTextView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub startFlicker(); } @SuppressLint("HandlerLeak") public void startFlicker(){ handler = new Handler(){ @Override public void dispatchMessage(Message msg) { if(change){ change = false; setTextColor(Color.TRANSPARENT); //这个是透明,=看不到文字 }else{ change = true; setTextColor(Color.RED); } } }; Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { Message msg = new Message(); handler.sendMessage(msg); } }; timer.schedule(task,1,300); //参数分别是delay(多长时间后执行),duration(执行间隔) } }
package com.example.empty; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.widget.TextView; public class FlickerText extends TextView{ public FlickerText(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } interface STATE{ static final int VISIBLE = 1; static final int INVISIBLE = 0; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); switch(getAlphastate()){ case STATE.VISIBLE:{ setAlpha(STATE.INVISIBLE); break; } case STATE.INVISIBLE:{ setAlpha(STATE.VISIBLE); break; } } postInvalidateDelayed(300); } public int getAlphastate(){ return (int)getAlpha()== STATE.INVISIBLE ? STATE.INVISIBLE:STATE.VISIBLE; } }
package com.example.empty; import java.util.Timer; import java.util.TimerTask; import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.widget.ImageView; public class FlikerImageView extends ImageView { boolean change = false; public FlikerImageView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub startFlicker(); } interface STATE { static final int VISIBLE = 255; static final int INVISIBLE = 0; } private Handler handler = new Handler() { @Override public void dispatchMessage(Message msg) { if (change) { change = false; setImageAlpha(STATE.INVISIBLE); } else { change = true; setImageAlpha(STATE.VISIBLE); } } }; public void startFlicker() { Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { Message msg = new Message(); handler.sendMessage(msg); } }; timer.schedule(task, 1, 300); } }
我这里给出了3种实现方案(其实是两种)来实现达到View闪烁的效果。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。