Android 特效View第三弹之闪烁View
来源:互联网 发布:内锥形螺纹编程实例 编辑:程序博客网 时间:2024/05/23 12:11
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闪烁的效果。
这里简单说明一下2种方案的思路
第一种我们通过Timer定时改变View的状态
第二种通过postInvalidateDelayed来每隔一段时间进行一次重绘。
然后我们改变View也是通过2种方式
一、setColor 二、setAlpha
当然,我们还可以通过一段动画(anim)来实现。但是原理是相同的
这里我推荐的方式是postInvalidateDelayed + setAlpha来实现
但是在ImageVIew种当你调用setAlpha时系统会自动调用Invalidate(onDraw),这时你的图片就会一直处于闪烁状态
这里我们就只能采用Timer和动画来实现了
0 0
- Android 特效View第三弹之闪烁View
- Android 特效View第三弹之闪烁View
- Android 特效View第四弹之折线图 心率图
- Android 特效View第四弹之折线图 心率图
- 自定义View之视差特效
- view 特效
- Android特效View之二之 闪闪发光Shimmer字体特效
- Android特效View之二之 闪闪发光Shimmer字体特效
- 自定义特效VIew第一弹之竖直TextView
- Android 自定义View(一) 内容切换特效
- Android 开发艺术与探究 第三章 View的事件体系之View的基础知识
- 《Android进阶之光》学习笔记——第三章 View体系与自定义View
- Android API之android.view.View.MeasureSpec
- Android之View布局
- android之view
- Android 之 View ViewGroup
- Android之自定义View
- Android 之自制View
- JQuery removeAttr() and removeClass()
- [Effective Java]第十章 并发
- 手机安全卫士------手机防盗页面之发送短信&接收短信
- NOIP提高组2010 乌龟棋
- 【机房收费系统】——小知识点总结
- Android 特效View第三弹之闪烁View
- 算法(第四版)学习笔记之java实现堆排序
- 如何设定tomcat启动时JVM内存大小,以免出现java.lang.OutOfMemoryError
- 深入了解MySQL
- 【java】this()与super()使用详解
- HTML5基础17----HTML5背景
- Leetcode|Reverse Words in a String
- 自己动手(二)──PullToRefresh之上拉翻页(3)
- 大小写转换