本文讲解主要涉及的知识点: 1.线程控制
2.画图类
3.心形函数 大家先看图片: <ignore_js_op> 因为前一段时间在写画图类,刚好有一个线程控制画图闪烁的,我就想说我能不能做一个心形闪烁的,出来的效果就如图,先贴再讲解代码: 里面设置两个类,一个是我们的activity类,这个类用来显示示图,然后建一个继承SurfaceView的类,我们在这里面画图。先贴两个累的代码: 主类名:GameMainActivity,画图类类名:Love.
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(new FxCanvasView(this, null));setContentView(new Love(this));}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

  

import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.graphics.Typeface;import android.view.SurfaceHolder;import android.view.SurfaceView;/** * @author CZ *  */public class Love extends SurfaceView implements SurfaceHolder.Callback,        Runnable {    boolean mbloop = false;    SurfaceHolder mSurfaceHolder = null;    private Canvas canvas;    int miCount = 0;    int y = 50;    /**     * @param context     */    public Love(Context context) {        super(context);        mSurfaceHolder = this.getHolder();        mSurfaceHolder.addCallback(this);        this.setFocusable(true);        this.setKeepScreenOn(true);        mbloop = true;    }    /*     * (non-Javadoc)     *      * @see     * android.view.SurfaceHolder.Callback#surfaceChanged(android.view.SurfaceHolder     * , int, int, int)     */    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width,            int height) {        // TODO Auto-generated method stub    }    /*     * (non-Javadoc)     *      * @see     * android.view.SurfaceHolder.Callback#surfaceCreated(android.view.SurfaceHolder     * )     */    @Override    public void surfaceCreated(SurfaceHolder holder) {        // TODO Auto-generated method stub        new Thread(this).start();    }    /*     * (non-Javadoc)     *      * @seeandroid.view.SurfaceHolder.Callback#surfaceDestroyed(android.view.     * SurfaceHolder)     */    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        // TODO Auto-generated method stub        mbloop = false;    }    /*     * (non-Javadoc)     *      * @see java.lang.Runnable#run()     */    @Override    public void run() {        // TODO Auto-generated method stub        while (mbloop) {            try {                Thread.sleep(200);            } catch (Exception e) {                // TODO: handle exception            }            synchronized (mSurfaceHolder) {                Draw();            }        }    }    /**     *      * Year:2011 Date:2011-7-27 Time:下午06:52:04 Author:CZ TODO     */    private void Draw() {          // TODO Auto-generated method stub          canvas = mSurfaceHolder.lockCanvas();          try {              if (mSurfaceHolder == null || canvas == null) {                  return;              }              if (miCount < 100) {                  miCount++;              } else {                  miCount = 0;              }              Paint paint = new Paint();              paint.setAntiAlias(true);              paint.setColor(Color.BLACK);              canvas.drawRect(0, 0, 320, 480, paint);              switch (miCount % 6) {              case 0:                  paint.setColor(Color.BLUE);                  break;             case 1:                  paint.setColor(Color.GREEN);                  break;              case 2:                  paint.setColor(Color.RED);                  break;              case 3:                  paint.setColor(Color.YELLOW);                  break;              case 4:                  paint.setColor(Color.argb(255, 255, 181, 216));                  break;              case 5:                  paint.setColor(Color.argb(255, 0, 255, 255));                  break;              default:                  paint.setColor(Color.WHITE);                  break;              }              int i, j;              double x, y, r;               for (i = 0; i <= 90; i++) {                  for (j = 0; j<= 90; j++) {                      r = Math.PI / 45 * i * (1 - Math.sin(Math.PI / 45 * j))                              * 20;                      x = r * Math.cos(Math.PI / 45 * j)                              * Math.sin(Math.PI / 45 * i) + 320 / 2;                      y = -r * Math.sin(Math.PI / 45 * j) + 400 / 4;                      canvas.drawPoint((float) x, (float) y, paint);                  }              }               paint.setTextSize(32);              paint.setTypeface(Typeface.create(Typeface.SERIF, Typeface.ITALIC));               RectF rect = new RectF(60, 400, 260, 405);              canvas.drawRoundRect(rect, (float) 1.0, (float) 1.0, paint);              canvas.drawText("Loving You", 75, 400, paint);              mSurfaceHolder.unlockCanvasAndPost(canvas);          } catch (Exception e) {          }       }}
关于这个程序要讲解的几点: 1. 画图的时候你可以继承View,也可以继承SurfaceView,这两者的区别在于:surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面。SurfaceView可以控制表面的格式,比如大小,显示在屏幕中的位置,最关键是的提供了SurfaceHolder类,使用getHolder方法获取,还有涉及的surfaceCreated(SurfaceHolder holder),surfaceDestroyed(SurfaceHolder holder),surfaceChanged(SurfaceHolder holder, int format, int width, int height)方法,而在SurfaceHolder.Callback 接口回调中可以通过重写来改变这些方法 2.程序其实很简单, 既然生命了Runnable接口,就有相对应的Run方法,在surfaceCreate()的时候开启线程,线程每隔200ms就刷新一次,这样我们看到的效果就是闪烁的,每200毫秒 画一次图,根据经过的间隔时间来设置画笔的颜色,然后通过循环描点,画出心形,然后设置字体大小,画字和字下面的横线。 3.关于心形函数,是从一个例子中看来得,关于x和y的得到, x = r * Math.cos(Math.PI / 45 * j)* Math.sin(Math.PI / 45 * i) + 320 / 2;y = -r * Math.sin(Math.PI / 45 * j) + 400 / 4; 320是屏幕的宽度,本来竖屏我设置的是480,可是下面得写字,就设置为400的了,关于画更好看的心形还有一个函数,大家可以看下:

更多相关文章

  1. Android-中常用方法集锦
  2. Android(安卓)首选网络模式默认值的修改方法
  3. android 中如何限制 EditText 最大输入字符数(2)
  4. Android(安卓)Studio 快捷键(转)
  5. android 屏幕保持唤醒 不锁屏
  6. Android下使用activation发送邮件
  7. android 关于自定义Application的使用
  8. Android(安卓)ZXing改横屏识别为竖屏识别[转]
  9. Android(安卓)NestedScrollView嵌套RecyclerView的问题

随机推荐

  1. Android单元测试(七):Robolectric,在JVM上调
  2. Android多分辨率适配框架(1)— 核心基础
  3. Android(安卓)Studio3.3打开Android(安卓
  4. android:radius设置圆角失败的问题
  5. Android进阶——Android视图工作机制之me
  6. Android 模拟器安装及使用教程
  7. Android软件的自动更新
  8. 欢迎进入Android的世界
  9. Android之我当年爬过的坑
  10. Android修改APP版本号