Android之自定义画图文字动画
结构:

BaseView:
package com.caiduping.canvas; import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View; public abstract class BaseView extends View{
//线程
private MyThread myThread; public BaseView(Context context, AttributeSet attrs) {
super(context, attrs);
} public BaseView(Context context) {
super(context);
} protected abstract void onDrawSub(Canvas canvas);//绘制图像
protected abstract void logic();//逻辑方法 子类实现 @Override
protected void onDraw(Canvas canvas) {
if(null==myThread){
myThread=new MyThread();
myThread.start();
}else{
onDrawSub(canvas);
}
} private boolean running=true;//控制循环 @Override
protected void onDetachedFromWindow() {
running=false;//销毁View的时候设置成false,退出无限循环
super.onDetachedFromWindow();
} //开启一个子线程绘制ui
private class MyThread extends Thread{
@Override
public void run() {
while(running){
logic();
postInvalidate();//重新绘制,会调用onDraw
try {
Thread.sleep(200); //线程挂起0.2秒 即画弧速度为0.2秒/弧度
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
LogicView:
package com.caiduping.canvas; import java.util.Random; import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet; public class LogicView extends BaseView{
private Paint paint;//画笔
private int x=0;
private RectF rectF=new RectF(150,150,380,380);
/*Rect类主要用于表示坐标系中的一块矩形区域
* 并可以对其做一些简单操作。这块矩形区域
需要用左上右下两个坐标点表示(left,top,right,bottom)
如果你这么声明一个Rect类:
Rect rect=new Rect(100,50,300,500);
那么右下角(300,500)其实是不在这个矩形里面的,但是左上角(100,50)在
也就是说,这个矩形实际表示的区域是:(100,50,299,499)*/
private int sweepAngle=0;//弧的结束度数
private Random random=new Random();//随机数 public LogicView(Context context, AttributeSet attrs) {
super(context, attrs);
//初始化
init();
} public LogicView(Context context) {
super(context);
init();
} //初始化画笔
private void init(){
paint=new Paint();
paint.setTextSize(30);
} @Override
protected final void onDrawSub(Canvas canvas) {
canvas.drawText("Android之自定义画图文字动画", x, 100, paint);
/*第一个参数是RectF左上的x y坐标 右下的x y坐标
第二个参数是 弧形的开始角度
第三个参数是 弧形的结束角度
第四个参数是 true:画扇形 false:画弧线
第五个参数是 画笔 */
canvas.drawArc(rectF, 0, sweepAngle, true, paint);
} @Override
protected void logic() {
x+=20;
sweepAngle+=5;//每次弧度加5 //随机设置画笔的颜色
int r=random.nextInt(255); //红色
int g=random.nextInt(255); //绿色
int b=random.nextInt(255); //蓝色
paint.setARGB(255, r, g, b); if(sweepAngle>=360){//如果弧度大于360°那么从头开始
sweepAngle=0;
} if(x>getWidth()){//如果移动到屏幕外,从头开始
int textWidth=(int) paint.measureText("Android之自定义画图文字动画");//测量文字宽度
x=0-textWidth;
}
}
}
MainActivity:
setContentView(new LogicView(this));
run:

Android之自定义画图文字动画的更多相关文章
- Android实现自定义带文字和图片的Button
Android实现自定义带文字和图片的Button 在Android开发中经常会需要用到带文字和图片的button,下面来讲解一下常用的实现办法. 一.用系统自带的Button实现 最简单的一种办法就 ...
- android checkbox自定义(文字位置、格式等)
第一种:在原生中只调整显示位置等: <CheckBox android:id="@+id/checkBox8" android:layout_width="wrap ...
- 【Android】Android实现自定义带文字和图片的Button
在Android开发中经常会需要用到带文字和图片的button,下面来讲解一下常用的实现办法. 一.用系统自带的Button实现 最简单的一种办法就是利用系统自带的Button来实现,这种方式代码量最 ...
- Android PullToRrefresh 自定义下拉刷新动画 (listview、scrollview等)
PullToRefreshScrollView 自定义下拉刷新动画,只需改一处. 以下部分转载自http://blog.csdn.net/superjunjin/article/details/450 ...
- [转]Android UI:看看Google官方自定义带旋转动画的ImageView-----RotateImageView怎么写(附 图片淡入淡出效果)
http://blog.csdn.net/yanzi1225627/article/details/22439119 众所周知,想要让ImageView旋转的话,可以用setRotation()让其围 ...
- [置顶] android 自定义ListView实现动画特效
通过自定义ListView实现动画特效,被点击元素A向前移,A之前元素往后移动. 重点在于动画的实现: 具体代码如下: package com.open.widget; import java.uti ...
- Android自己定义组件系列【8】——面膜文字动画
我们掩盖文字动画Flash中非经货共同体共同,由于Android应用程序开发人员做你想要做这个动画在应用程序中去?本文中,我们看的是如何自己的定义ImageView来实现让一张文字图片实现文字的遮罩闪 ...
- Android自定义底部带有动画的Dialog
Android自定义底部带有动画的Dialog 效果图 先看效果图,是不是你想要的呢 自定义Dialog package --.view; import android.app.Dialog; imp ...
- Android UI:看看Google官方自定义带旋转动画的ImageView-----RotateImageView怎么写(附 图片淡入淡...)
众所周知,想要让ImageView旋转的话,可以用setRotation()让其围绕中心点旋转,但这个旋转是不带动画的,也就是旋转屏幕时图片噌的一下就转过去了,看不到旋转的过程,此UI体验不大好,为此 ...
随机推荐
- when not exists 用法
USE [ChangHong_612]GO/****** Object: StoredProcedure [dbo].[st_MES_UpdateInspectResult] Script Date: ...
- 正整数的n次方求和
引理: (Abel分部求和法) $$\sum_{k=1}^{n}a_{k}b_{k}=A_{n}b_{n}+\sum_{k=1}^{n-1}A_{k}(b_{k}-b_{k+1})$$其中$A_{k} ...
- Python 结巴分词模块
原文链接:http://www.gowhich.com/blog/147?utm_source=tuicool&utm_medium=referral PS:结巴分词支持Python3 源码下 ...
- Android EditText载入HTML内容(内容包括网络图片)
android中的Html.fromHtml能够用来载入HTML的内容.fromHtml有三个參数须要设置,第一个是要显示的html内容,第二个就是要说的重点,ImageGetter,用来处理图片载入 ...
- poj2105 IP Address(简单题)
题目链接:id=2105">http://poj.org/problem?id=2105 ----------------------------------------------- ...
- 函数定义从零开始学C++之从C到C++(一):const与#define、结构体对齐、函数重载name mangling、new/delete 等
今天一直在学习函数定义之类的问题,下午正好有机会和大家共享一下. 一.bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC+ ...
- Codeforces Round #334 (Div. 2) A. Uncowed Forces 水题
A. Uncowed Forces Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/604/pro ...
- Java log code example
Java log example Logrecord filter import java.util.logging.Filter; import java.util.logging.Level; i ...
- mysql 5.1 到 mysql 5.2的出现的索引BTREE问题 use near 'USING BTREE
转自:http://hi.baidu.com/our_poll/item/669c5ce885b33ff1e0a5d4fc 我本机测试是安装的 mysql 5.1 , 但服务器上确是使用的 mysql ...
- iOS开发——实用篇Swift篇&项目开发常用实用技术
项目开发常用实用技术 实现拨打电话 要实现打电话功能,最简单最直接的方式便是:直接跳到拨号界面 (注意:这个需要真机调试,模拟器无效果) UIApplication.sharedApplica ...