【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);
   }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章