Android Paint屬性詳解

 


最近項目中遇到要繪製一個橡皮擦類類似功能的模塊。於是總結了下Paint的屬性



      1. 圖形繪製  畫線 畫圖片等

      列出一些重要的屬性
         1. setARGB(int a,int r,int g,int b);  //設置繪製的顏色,a代表透明度,r,g,b代表顏色值。  
          2.setAlpha(int a); //a[0..255] 0:代表全透明  255代表不透明

         3.setStrokeWidth(int);//置畫筆的大小

         4.setStrokeCap(Cap cap);//設置筆刷的樣式 Paint.Cap.Round ,Cap.SQUARE等分別爲圓形、方形

         5.setStyle(Style style);//畫筆樣式。 Paint.Style.STROKE爲一條線。Paint.Style.FILL是從起點開始。一直到終點爲止,形成一扇形的繪製區。Paint.Style.FILL_AND_STROKE 爲扇形區再加上一個圈
         6. setShadowLayer(float radius ,float dx,float dy,int color);  
        //在圖形下面設置陰影層,產生陰影效果,radius爲陰影的角度,dx和dy爲陰影在x軸和y軸上的距離,color爲陰影的顏色  
     
       7.setXfermode(Xfermode xfermode);  
     // 設置圖形重疊時的處理方式,如合併,取交集或並集,經常用來製作橡皮的擦除效果  
    
      2.文本繪製
  

      這裏文本有人總結了挺好的,不浪費時間 給連接http://hi.baidu.com/982012087/item/4879442440d49dc0a417b645

     3、案例分析

      

package com.example.drawbeforebkg;


import android.R.integer;
import android.app.Activity;
import android.content.Context;
import android.graphics.AvoidXfermode.Mode;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuffXfermode;
import android.graphics.Xfermode;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;


public class MainActivity extends Activity {
   
Path path = new Path();


private CircleView mGameView =null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        mGameView = new CircleView(this);
        mGameView.setBackgroundDrawable(getResources().getDrawable(R.drawable.logo) );//設置的背景圖片 
        
       setContentView(mGameView);
    }


    
    
    
class CircleView extends View implements Runnable{
	
    int x,y;
    Canvas canvas;
    Bitmap resizedBitmap1 ;
    Paint paint;
    private int oldx ,oldy;
    DisplayMetrics  dm = new DisplayMetrics(); 
     
   
    CircleView(Context context)//構造函數
    {
   
    super(context);
    getWindowManager().getDefaultDisplay().getMetrics(dm); // 獲取手機屏幕的大小
    int  view_w = dm.widthPixels; 
    int   view_h = dm.heightPixels; 
    paint=new Paint();
    paint.setStrokeWidth(20); //當Style爲STROKE或者爲FILL——OR——STROKE
    paint.setColor(Color.RED); //設置顏色值
    paint.setAlpha(100);//設置透明度
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeCap(Paint.Cap.ROUND);
    paint.setStrokeJoin(Paint.Join.ROUND);
    paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.CLEAR));
    //paint.setAntiAlias(false);  
   // paint.setDither(true);//設置是否使用圖像抖動處理,會使畫筆更平滑飽滿。圖像更清晰
    resizedBitmap1 = Bitmap.createBitmap(view_w, view_h, Config.ARGB_8888);
    canvas = new Canvas(resizedBitmap1);//第一步:構造函數中,將resizedBitmap1作爲畫布背景


    new Thread(this).start();
    }
   
    public boolean onTouchEvent(MotionEvent event)
    {
     x=(int) event.getX();
     y=(int) (event.getY());


    switch (event.getAction()) 
    {
     case MotionEvent.ACTION_DOWN:
        path.moveTo(x, y);
        oldx = x;
        oldy = y;
      break;
      
     case MotionEvent.ACTION_MOVE:
     
      //path.lineTo(x, y);      
      path.quadTo(oldx, oldy, x, y);
      canvas.drawPath(path, paint);//第二步:指定軌跡畫圖,將path畫在畫布上          
      oldx = x;
      oldy = y;
      break;
      
     case MotionEvent.ACTION_UP:
     
      break;
      
     default:            
      break;
       
    }


         return true;
}
   
   
   
    @Override
    public  void onDraw(Canvas canvas) {


            super.onDraw(canvas);
            canvas.drawBitmap(resizedBitmap1,0,0,paint);//第三步:時刻顯示畫布上的佈景


    }


   
    public void run()
    {
    while (!Thread.currentThread().isInterrupted())
    {
    try
    {
    Thread.sleep(20);
    }
    catch (InterruptedException e)
    {
    Thread.currentThread().interrupt();
    }
    // 使用postInvalidate可以直接在線程中更新界面
    postInvalidate();
    }
    }


    }
    


   


   


   


  
    }


 

 


     

 

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