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

2018-11-14  本文已影响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设为整个界面
    }
}
效果
上一篇下一篇

猜你喜欢

热点阅读