如何利用Thread制作简单的android动画

最近按照老板要求要做一个简单动画,内容可以简单概括为一个箭头在屏幕中心自动旋转。我知道android API里面有animation类,它已经提供了rotation的函数。可是,老板要求不用它的API。所以我的制作如下:

1.先了解一下线程(Thread)

多线程指的是一个应用程序当中有多个线程,线程是并列运行的,一起抢占CPU。我们平时写的主函数就是一个线程,如果我们继承了Thread类,则又开发了一个新的线程。

它有两种实现方法:

一个是继承Thread类,并override里面的run()函数。

另一个方法是implement Runnable(),并override里面的run()函数。

如下:

class myThread extends Thread{

public void run(){
    //写要运行的代码
  }

}

//启动线程

myThread.start();

另一种方法:
class PrimeRun implements Runnable {          public void run() {             // compute primes larger than minPrime              . . .         }     } //启动线程
PrimeRun p = new PrimeRun();     new Thread(p).start();

我利用的是Thread类中的方法:myThread.sleep();这个方法可以让系统每隔一段时间运行一次,我设置的间隔时间是100ms。而每次我画的指针都会变动它的位置,因此连起来看上去就是它在自己转动。代码如下:
private final Runnable moveThread = new Runnable(){

        @Override
        public void run() {
            // TODO Auto-generated method stub
            while(true){
                degree=degree+0.1;
                b = 300*Math.cos(Math.toRadians(degree));
                a = 300*Math.sin(Math.toRadians(degree));
                try{
                    Thread.sleep(100);

                }catch(InterruptedException e){
                    e.printStackTrace();
                }
                postInvalidate();//每变动完一次之后重新绘图。
            }
        }

    };

new Thread(moveThread).start();

接下来写画直线的代码:需要创建一个MyView来继承View,并override里面的onDraw()函数

public class MyView extends View{

public MyView (Context context){
    super(context);

public void onDraw(Canvas canvas){

     super.onDraw(canvas);
      float Xcenter = (float)getWidth()/2;
      float Ycenter = (float)getHeight()/2;

     Vector(Xcenter,Ycenter,(float)(Xcenter+a),(float)(Ycenter+b),p,canvas); //随着每100ms,a和b的值一直在变动,最后的效果就是一个箭头在屏幕中间绕半径为300的圆自动旋转。
}
}

}

//Vector函数用来画一个箭头,是自己定义的函数如下:

public void Vector(float x1,float y1,float x2,float y2,Paint paint,Canvas canvas){
double Vdeg = Math.toDegrees(Math.atan2(y2-y1, x2-x1));
double deldeg = 10;
canvas.drawLine(x1, y1, x2, y2, paint);
double arrowsize = 0.8*Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
double Vrad = (Vdeg-deldeg)*Math.PI/180.0;
canvas.drawLine((float)(x1+arrowsize*Math.cos(Vrad)),(float)(y1+arrowsize*Math.sin(Vrad)),x2,y2,paint);
Vrad = (Vdeg+deldeg)*Math.PI/180.0;
canvas.drawLine((float)(x1+arrowsize*Math.cos(Vrad)),(float)(y1+arrowsize*Math.sin(Vrad)),x2,y2,paint);

}

 
				
时间: 2024-08-06 08:34:45

如何利用Thread制作简单的android动画的相关文章

ArcGIS利用DEM制作简单三维

利用DEM数据镶嵌后,矢量数据裁剪得到研究范围的DEM数据,在ARCScene中进行三维制作 ArcGIS利用DEM制作简单三维 点击学习我的系统教程哦

利用replaceChild制作简单的吞噬效果【jsDEMO】

[功能说明] 利用replaceChild制作简单的吞噬效果 [HTML代码说明] <ul class="list" id="list"> <li class="in">1</li> <li class="in">2</li> <li class="in">3</li> <li class="in"

利用removeChild制作简单的倒序删除效果【jsDEMO】

[功能说明] 利用removeChild制作简单的倒序删除效果 [HTML代码说明] <ul class="list" id="list"> <li class="in">1</li> <li class="in">2</li> <li class="in">3</li> <li class="in"

利用insertBefore制作简单的循环插空效果【jsDEMO】

[功能说明] 利用insertBefore制作简单的循环插空效果 [HTML代码说明] <ul class="list" id="list"> <li class="in">1</li> <li class="in">2</li> <li class="in">3</li> <li class="in&quo

利用UIImageView实现简单的帧动画

原文链接: 利用UIImageView实现简单的帧动画 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/MajorLMJ iOS开发者公会-技术1群 QQ群号:87440292 iOS开发者公会-技术2群 QQ群号:232702419 iOS开发者公会-议事区   QQ群号:413102158

利用 css 制作简单的提示框

在网页开发中,为了提高用户体验,经常会用到一些提示框来引导用户,这里分享下一些简单的提示框的制作 1.首先类似一个长方形右上角一个关闭按钮 这里用到的主要是一些定位的知识,运用relative和absolute可以快速制作这样的一个提示框,想详细了解,点击这里 html代码: <div id="position"> <div class="position-relative"> <span>提示信息</span> &l

WPF动画制作简单的按钮动画

主界面的代码 <StackPanel ButtonBase.Click="Grid_Click"> <Button Content="逐渐变大缩小"/> <Button Content="鼠标移动特效" /> </StackPanel> cs : //这事件不做过多的解释有基础的一看就会明白 private void Grid_Click(object sender, RoutedEventArgs

利用烧鹅制作简单BadUSB,插谁谁怀孕

所用硬件设备为烧鹅,烧鹅是RadioWar基于Teensy++ 2.0 AT90USB1286芯片设计的USB Rubber Ducky类开发板. 使用veil编码meterpreter生成payload(经过编码的payload在杀软中仅能够存活几分钟),放到服务器上.插入烧鹅,模拟键盘输入,在cmd中下载payload,并执行. Github:https://github.com/RadioWar/FireGoose 0x1 利用veil编码打造免杀的meterpreter  [email 

利用函数制作简单的轮播图

2016年11月29日,星期二    一.样式代码: 样式图: 二.设置DIV(left,center,right),script,JS链接: 三.函数代码: 四.完成图: