源代碼下載:http://download.csdn.net/detail/yigelangmandeshiren/4989125
package com.manning.aip.canvasdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/**
* drawRGB
*/
Button randColorButton = (Button) findViewById(R.id.randcolor_button);
randColorButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Main.this, Canvas2DRandomColorActivity.class));
}
});
/**
* 全屏
*/
Button randColorFullScreenButton = (Button) findViewById(R.id.randcolor_fullscreen_button);
randColorFullScreenButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Main.this, Canvas2DRandomColorFullScreenActivity.class));
}
});
/**
* 十條線
*/
Button randomShapesButton = (Button) findViewById(R.id.randomshapes_button);
randomShapesButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Main.this, Canvas2DRandomShapesActivity.class));
}
});
/**
* 十條線 透明度
*/
Button randomShapesAlphaButton = (Button) findViewById(R.id.randomshapes_alpha_button);
randomShapesAlphaButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Main.this, Canvas2DRandomShapesWithAlphaActivity.class));
}
});
/**
* 十條線 invalidate 重繪
*/
Button randomShapesRedrawButton = (Button) findViewById(R.id.randomshapes_redraw_button);
randomShapesRedrawButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Main.this, Canvas2DRandomShapesRedrawActivity.class));
}
});
Button shapesAndTextLHXButton = (Button) findViewById(R.id.shapesandtext_lhx_button);
shapesAndTextLHXButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Main.this, Canvas2DShapesAndTextLHXStyleActivity.class));
}
});
/**
* 字體類型 ttf Typeface
*/
Button shapesAndTextFontButton = (Button) findViewById(R.id.shapesandtext_font_button);
shapesAndTextFontButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Main.this, Canvas2DShapesAndTextFontActivity.class));
}
});
Button shapesAndTextBitmapButton = (Button) findViewById(R.id.shapesandtext_bitmap_button);
shapesAndTextBitmapButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Main.this, Canvas2DShapesAndTextBitmapActivity.class));
}
});
}
}
Button 1:
package com.manning.aip.canvasdemo;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.View;
import java.util.Random;
public class Canvas2DRandomColorActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new CanvasView(this));
}
class CanvasView extends View {
Random random = new Random();
public CanvasView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRGB(random.nextInt(256), random.nextInt(256), random.nextInt(256));
//黑色
canvas.drawRGB(0, 0, 0);
}
}
}
Button 2:
package com.manning.aip.canvasdemo;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import java.util.Random;
public class Canvas2DRandomColorFullScreenActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(new CanvasView(this));
}
class CanvasView extends View {
Random random = new Random();
public CanvasView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRGB(random.nextInt(256), random.nextInt(256), random.nextInt(256));
}
}
}
Button 3 :
package com.manning.aip.canvasdemo;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import java.util.Random;
public class Canvas2DRandomShapesActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new CanvasView(this));
}
class CanvasView extends View {
Paint paint;
Random random = new Random();
public CanvasView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRGB(0, 0, 0);
for (int i = 0; i < 10; i++) {
paint = new Paint();
paint.setARGB(255, random.nextInt(256), random.nextInt(256), random.nextInt(256));
canvas.drawLine(random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()),
random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()), paint);
canvas.drawCircle(random.nextInt(canvas.getWidth() - 30), random.nextInt(canvas.getHeight() - 30),
random.nextInt(30), paint);
canvas.drawRect(random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()),
random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()), paint);
}
}
}
}
Button 4 :
package com.manning.aip.canvasdemo;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import java.util.Random;
public class Canvas2DRandomShapesWithAlphaActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new CanvasView(this));
}
class CanvasView extends View {
Paint paint;
Random random = new Random();
public CanvasView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRGB(0, 0, 0);
for (int i = 0; i < 10; i++) {
paint = new Paint();
paint.setARGB(random.nextInt(256), random.nextInt(256), random.nextInt(256), random.nextInt(256));
canvas.drawLine(random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()),
random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()), paint);
canvas.drawCircle(random.nextInt(canvas.getWidth() - 30), random.nextInt(canvas.getHeight() - 30),
random.nextInt(30), paint);
canvas.drawRect(random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()),
random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()), paint);
}
}
}
}
Button 5 :
package com.manning.aip.canvasdemo;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import java.util.Random;
public class Canvas2DRandomShapesRedrawActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new CanvasView(this));
}
class CanvasView extends View {
Paint paint;
Random random = new Random();
public CanvasView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRGB(0, 0, 0);
for (int i = 0; i < 10; i++) {
paint = new Paint();
paint.setARGB(random.nextInt(256), random.nextInt(256), random.nextInt(256), random.nextInt(256));
canvas.drawLine(random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()),
random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()), paint);
canvas.drawCircle(random.nextInt(canvas.getWidth() - 30), random.nextInt(canvas.getHeight() - 30),
random.nextInt(30), paint);
canvas.drawRect(random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()),
random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()), paint);
}
invalidate();
/**
* invalidate()方法 :
說明:請求重繪View樹,即draw()過程,假如視圖發生大小沒有變化就不會調用layout()過程,並且只繪製那些“需要重繪的”
視圖,即誰(View的話,只繪製該View ;ViewGroup,則繪製整個ViewGroup)請求invalidate()方法,就繪製該視圖。
一般引起invalidate()操作的函數如下:
1、直接調用invalidate()方法,請求重新draw(),但只會繪製調用者本身。
2、setSelection()方法 :請求重新draw(),但只會繪製調用者本身。
3、setVisibility()方法 : 當View可視狀態在INVISIBLE轉換VISIBLE時,會間接調用invalidate()方法,
繼而繪製該View。
4 、setEnabled()方法 : 請求重新draw(),但不會重新繪製任何視圖包括該調用者本身。
*/
}
}
}
Button 6 :
package com.manning.aip.canvasdemo;
import android.app.Activity;
import android.os.Bundle;
public class Canvas2DShapesAndTextLHXStyleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ShapesAndTextView view = new ShapesAndTextView(this);
view.setText("LHX Style");
setContentView(view);
}
}
/**
*
*/
package com.manning.aip.canvasdemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.View;
/**
* View to display an LHX type intro.
*
* @author tamas
*
*/
public class ShapesAndTextView extends View {
private Paint paint;
private String text;
public ShapesAndTextView(Context context) {
super(context);
}
public void setText(String text) {
this.text = text;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRGB(0, 0, 0);
drawShapes(canvas);
drawText(canvas);
}
private void drawShapes(Canvas canvas) {
// draw a red square, a green circle and blue triangle in the bottom part of the screen
int side = canvas.getWidth() / 5;
paint = new Paint();
paint.setARGB(255, 255, 0, 0);
canvas.drawRect(side, canvas.getHeight() - 60 - side, side + side, canvas.getHeight() - 60, paint);
paint.setARGB(255, 0, 255, 0);
canvas.drawCircle(side * 2 + side / 2, canvas.getHeight() - 60 - side / 2, side / 2, paint);
paint.setARGB(255, 0, 0, 255);
paint.setStyle(Paint.Style.FILL);
Path triangle = new Path();
triangle.moveTo(side * 3 + 30, canvas.getHeight() - 60 - side);
triangle.lineTo(side * 3 + 60, canvas.getHeight() - 60);
triangle.lineTo(side * 3, canvas.getHeight() - 60);
triangle.lineTo(side * 3 + 30, canvas.getHeight() - 60 - side);
canvas.drawPath(triangle, paint);
}
private void drawText(Canvas canvas) {
paint.setColor(Color.WHITE);
paint.setTextSize(48);
canvas.drawText(text, 60, 300, paint);
}
}
Button 7 字體類型 ttf Typeface :
package com.manning.aip.canvasdemo;
import android.app.Activity;
import android.os.Bundle;
public class Canvas2DShapesAndTextFontActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ShapesAndTextFontView view = new ShapesAndTextFontView(this);
view.setText("256 byte Style");
setContentView(view);
}
}
/**
*
*/
package com.manning.aip.canvasdemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Typeface;
import android.view.View;
/**
* View to display a true type font via Canvas.
*
* @author tamas
*
*/
public class ShapesAndTextFontView extends View {
private Paint paint;
private Typeface font;
private String text;
public ShapesAndTextFontView(Context context) {
super(context);
// Loading up the font
font = Typeface.createFromAsset(context.getAssets(), "256bytes.ttf");
}
public void setText(String text) {
this.text = text;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRGB(0, 0, 0);
drawShapes(canvas);
drawText(canvas);
}
private void drawShapes(Canvas canvas) {
// draw a red square, a green circle and blue triangle in the bottom part of the screen
int side = canvas.getWidth() / 5;
paint = new Paint();
paint.setARGB(255, 255, 0, 0);
canvas.drawRect(side, canvas.getHeight() - 60 - side, side + side, canvas.getHeight() - 60, paint);
paint.setARGB(255, 0, 255, 0);
canvas.drawCircle(side * 2 + side / 2, canvas.getHeight() - 60 - side / 2, side / 2, paint);
paint.setARGB(255, 0, 0, 255);
paint.setStyle(Paint.Style.FILL);
Path triangle = new Path();
triangle.moveTo(side * 3 + 30, canvas.getHeight() - 60 - side);
triangle.lineTo(side * 3 + 60, canvas.getHeight() - 60);
triangle.lineTo(side * 3, canvas.getHeight() - 60);
triangle.lineTo(side * 3 + 30, canvas.getHeight() - 60 - side);
canvas.drawPath(triangle, paint);
}
private void drawText(Canvas canvas) {
paint.setColor(Color.WHITE);
paint.setTextSize(40);
paint.setTypeface(font);
canvas.drawText(text, 60, 300, paint);
}
}
Button 8 :
package com.manning.aip.canvasdemo;
import android.app.Activity;
import android.os.Bundle;
public class Canvas2DShapesAndTextBitmapActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ShapesAndTextBitmapView view = new ShapesAndTextBitmapView(this);
setContentView(view);
}
}
/**
*
*/
package com.manning.aip.canvasdemo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.View;
/**
* View to display a Bitmap.
*
* @author tamas
*
*/
public class ShapesAndTextBitmapView extends View {
private Paint paint;
private Bitmap bitmap;
public ShapesAndTextBitmapView(Context context) {
super(context);
// loading the bitmap
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.copter);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRGB(0, 0, 0);
drawShapes(canvas);
drawBitmap(canvas);
}
private void drawShapes(Canvas canvas) {
// draw a red square, a green circle and blue triangle in the bottom part of the screen
int side = canvas.getWidth() / 5;
paint = new Paint();
paint.setARGB(255, 255, 0, 0);
canvas.drawRect(side, canvas.getHeight() - 60 - side, side + side, canvas.getHeight() - 60, paint);
paint.setARGB(255, 0, 255, 0);
canvas.drawCircle(side * 2 + side / 2, canvas.getHeight() - 60 - side / 2, side / 2, paint);
paint.setARGB(255, 0, 0, 255);
paint.setStyle(Paint.Style.FILL);
Path triangle = new Path();
triangle.moveTo(side * 3 + 30, canvas.getHeight() - 60 - side);
triangle.lineTo(side * 3 + 60, canvas.getHeight() - 60);
triangle.lineTo(side * 3, canvas.getHeight() - 60);
triangle.lineTo(side * 3 + 30, canvas.getHeight() - 60 - side);
canvas.drawPath(triangle, paint);
}
private void drawBitmap(Canvas canvas) {
paint = new Paint();
canvas.drawBitmap(bitmap, 0, 0, paint);
}
}