【Android】Android2D图像之Canvas

源代码下载: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);
   }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值