zoukankan      html  css  js  c++  java
  • 钟表动画的实现

    1,android中凡是牵涉到动画一般需要线程,及在线程中进行一定时间的休眠来实现。(除了系统自带的几种animation)

    2,在项目中需要每个钟表的色块需要实现从0点至当前时间的顺序添加代表不同时钟的色块,并且需要根据等级选择不同颜色的色块。

    实现的步骤如下:

    (1)将不同颜色,代表不同时刻的图片资源id利用二维数组来表示:

     private int[] levels={1,3,2,1,2,2,3,2,1,3,1};
    public
    static int[][] imgs = { { R.drawable.brown1, R.drawable.brown2, R.drawable.brown3, R.drawable.brown4, R.drawable.brown5, R.drawable.brown6, R.drawable.brown7, R.drawable.brown8, R.drawable.brown9, R.drawable.brown10,R.drawable.brown11 }, { R.drawable.red1, R.drawable.red2, R.drawable.red3, R.drawable.red4, R.drawable.red5, R.drawable.red6, R.drawable.red7, R.drawable.red8, R.drawable.red9, R.drawable.red10,R.drawable.red11 }, { R.drawable.green1, R.drawable.green2, R.drawable.green3, R.drawable.green4, R.drawable.green5, R.drawable.green6, R.drawable.green7, R.drawable.green8, R.drawable.green9, R.drawable.green10 ,R.drawable.green11} };

    (2)接下来主线程的代码如下:

        private void generateClock() {
            //首先添加钟表的背景图片
            ImageView clock=new ImageView(ShouyeActivity.this);
            clock.setImageResource(com.bobo.mylvluo.R.drawable.clock_bg);
            frame_clock.addView(clock);        
            //开启线程
            new AddImgThread().start();
     
        }

    (3)而实现动画的线程如下:(记得,主线程中的UI未必只有while)

    class AddImgThread extends Thread{
            public void run(){
                 for(int i=0;i<levels.length;i++){
                     Message msg=new Message();
                     msg.arg1=i;
                     handler.sendMessage(msg);
                     try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                 }
    
            }
        }

    (4)在主界面更新UI的handler为

        private Handler handler=new Handler(){
    
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                    int i=msg.arg1;
                    ImageView img=new ImageView(ShouyeActivity.this);
                    //其中i+1代表的是时间;level【i】代表i+1时间的空气质量等级,img【levels【i】-1】【i】代表的是对应的图片
                    img.setImageResource(Constant.imgs[levels[i]-1][i]);
                    //为其添加一个位移的动画效果
                    TranslateAnimation ani=new TranslateAnimation(5f,0f,5f,0f);
                    ani.setDuration(200);
                    frame_clock.addView(img);
                    
                    img.setAnimation(ani);
                    
                
                
            }
            
        };
  • 相关阅读:
    POJ 1611 The Suspects(并查集)
    POJ 2485 Highways(最小生成树Prim算法)
    POJ 1062 昂贵的聘礼(最短路径Dijkstr的变形)
    SDUT 2374 || HDU 1803Cylinder(计算几何求体积)
    HDU 1804 || SDUT 2375 Deli Deli(简单题)
    POJ 3041 Asteroids(二分图的最大匹配)
    HDU 1802 || SDUT 2373 Black and white painting(规律)
    POJ 1035 Spell checker(字符串简单匹配)
    POJ 3080 Blue Jeans(KMP模式匹配)
    js中反斜杠\的一些研究
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3035597.html
Copyright © 2011-2022 走看看