美文网首页
aide安卓编程14-彩色雪花屏:定时器,随机数,贴图片

aide安卓编程14-彩色雪花屏:定时器,随机数,贴图片

作者: 傻傻不知天年 | 来源:发表于2018-11-14 14:50 被阅读0次

    以下例子实现:

    1)用Random产生3个0到255的随机整数凑成一个随机颜色
    2)用定时器每隔一段时间重画一次界面
    3)创建Bitmap(位图)类型图片bm,每次绘制界面时先把bm每个像素点设置成随机颜色(比canvas.DrawPoint效率高的多),最后把整个图片贴到(充满)窗口。

    最终效果就是不断变换颜色的彩色雪花屏。

    从本次开始,我们把自定义的类都写到MainActivity内,这样可以共用MainActivity的全局变量。

    package com.baobao.sayhello;
    
    import android.app.*;
    import android.content.*;
    import android.graphics.*;
    import android.os.*;
    import android.view.*;
    import android.widget.*;
    import java.util.*;
    
    
    public class MainActivity extends Activity 
    {
        
        mview view;
        int winx,winy,bmx,bmy;
        Bitmap bm;
        class mview extends View{//自定义一个叫mview的新类型,继承View
            public mview(Context con){//构造(初始化)函数
                super(con);
            }
    
            @Override
            protected void onSizeChanged(int w, int h, int oldw, int oldh)
            {
                //窗口大小改变时触发
                super.onSizeChanged(w, h, oldw, oldh);
                winx=w;winy=h;bmx=winx/8;bmy=winy/8;
                bm=Bitmap.createBitmap(bmx,bmy,Bitmap.Config.RGB_565);//建立指定宽高的图片bm
                new Timer().schedule(new TimerTask(){//建立定时器
                    @Override
                    public void run(){//每次要做的内容
                        view.invalidate();//重绘窗口
                    }
                },0,10);//0毫秒后开始,每隔10毫秒运行一次
            }
    
            @Override
            protected void onDraw(Canvas canvas)
            {
                Paint p=new Paint();
                int ix,iy;
                Random r=new Random();//创建随机数生成器
                for(ix=0;ix<bmx;ix++)
                    for(iy=0;iy<bmy;iy++)
                        bm.setPixel(ix,iy,Color.rgb(r.nextInt(256),r.nextInt(256),r.nextInt(256)));//设置图片每个像素为随机色
                canvas.drawBitmap(bm,null,new RectF(0,0,winx,winy),p);//把图片贴到屏幕
            }
    
            @Override
            public boolean onTouchEvent(MotionEvent event)
            {
                //触控屏幕时触发
                if(event.getAction()==MotionEvent.ACTION_DOWN){
                    //如果事件类型为按下
                    
                }
    
                return true;//返回真,表示已处理消息
            }
        }
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            view=new mview(this);//新建一个叫view的mview
            setContentView(view);//把view设为整个界面
        }
    }
    
    效果

    相关文章

      网友评论

          本文标题:aide安卓编程14-彩色雪花屏:定时器,随机数,贴图片

          本文链接:https://www.haomeiwen.com/subject/yukjfqtx.html