知识点:1、DDMS:是Android的一种工具,这个工具可以对Android程序以及设备进行运行追踪和调试
2、Logcat:android的控制台
将异常或者错误信息输出到Android的控制台(代码如下)
try{ Class.forName("111"); }catch(Exception e){ //先输出异常类型和描述信息 Log.e("tag", e.toString()); //然后再将堆栈的方法调用痕迹输出 StackTraceElement[] ste=e.getStackTrace(); for(int i=0;i<ste.length;i++){ Log.e("tag", ste[i].toString()); } }
如何方便快捷的找出错误信息(输出信息的方式)
//输出信息到logcat Log.e("Tag", "这是error级的信息,字体为红色"); Log.w("Tag", "这是warning级的信息,字体为橙色"); Log.d("Tag", "这是debug级的信息,字体为蓝色"); Log.i("Tag", "这是info级的信息,字体绿色"); Log.v("Tag", "这是verbose级的信息,字体为黑色"); //按理来说我们如果是调试信息,那么应该用d,如果是看变量值,应该是用i //如果是错误应该是e //但是个人建议除了错误外,都使用v,因为黑色在logcat中非常容易区分
3、View:View是android中的一种称呼,在android中所有可见的,不可见的,只要是控件,都可以称呼为view(相当于swing的Component)
View分为两类:3.1、ViewGroup:布局,容器View
3.2、View:Button,TextView等传统的控件。
4、一个简单的例子(模拟水滴)
步骤一:新建一个Circle类模拟水滴(代码如下)
package com.zjyb.demo3;import android.graphics.Color;//圈圈的类public class Circle { //以前我们都喜欢private,然后get/set //在android中没这种讲法 //水滴的X轴坐标 public float x; //水滴的Y轴坐标 public float y; //水滴的半径 public float radius; //水滴的颜色 public int color=Color.parseColor("#16e9c9"); //水滴的透明度 public int alpha=255;}
步骤二:新建一个MyView类继承View(代码如下)
package com.zjyb.demo3;import java.util.ArrayList;import java.util.List;import java.util.Random;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.View;public class MyView extends View implements Runnable{ public void run(){ while(true){ //invalidate和postInvalidate //前者是普通的销毁,是线程不安全的,通常我们会在UI线程中调用 //后者是内部实现了Handler消息队列的销毁方式,可以在非UI线程中调用 //然后具体的执行会有内部实现的Handle去处理 postInvalidate(); try{ Thread.sleep(100); }catch(Exception e){ } } } public MyView(Context context) { super(context); new Thread(this).start(); // TODO Auto-generated constructor stub } public Circle c; //利用集合存放以前绘制的内容 public List<Circle> historyCircle=new ArrayList(); public void add(Circle c){ //if(historyCircle.size()>10){ // historyCircle.remove(0); //} historyCircle.add(c); } //绘制方法,每次当控件被构建的时候调用,然后绘制控件 @Override protected void onDraw(Canvas canvas) { Random rd=new Random(); //首先准备画笔 Paint paint=new Paint(); //设置画笔属性 //设置画笔为绘制空心 paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(4); //开始绘制 for(int i=0;i<historyCircle.size();i++){ Circle c= historyCircle.get(i); paint.setColor(c.color); //设置透明度 paint.setAlpha(c.alpha); canvas.drawCircle(c.x, c.y, c.radius, paint); c.radius=c.radius+5; c.alpha=c.alpha-12; if(c.radius>100){ historyCircle.remove(i); } } //if(c!=null){ // canvas.drawCircle(c.x, c.y, c.radius, paint); //} super.onDraw(canvas); }}
步骤三、编写MainActivity中的代码
package com.zjyb.demo3;import java.util.Random;import android.os.Bundle;import android.app.Activity;import android.graphics.Color;import android.view.Menu;import android.view.MotionEvent;import android.view.Window;import android.view.WindowManager;public class MainActivity extends Activity { MyView view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //全屏,必须在setContentView之前调用 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); view=new MyView(this); setContentView(view); } //触摸方法,当屏幕被触摸的时候自动调用 @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub //Touch表示触摸,有两种状态:Down和Up //if(event.getAction()==MotionEvent.ACTION_UP){ Random rd=new Random(); Circle c=new Circle(); c.x=event.getX(); c.y=event.getY(); c.radius=10;//rd.nextInt(51)+10; //c.color=Color.rgb(rd.nextInt(250), rd.nextInt(250), rd.nextInt(250)); view.add(c); //view.historyCircle.add(c); //view.c=c; //摧毁,让view进行重绘 view.invalidate(); //} return super.onTouchEvent(event); }}
源码下载请点这里: