您的位置:首页 > 移动开发 > Android开发

Android Paint属性详解

2016-07-10 21:31 393 查看
原文地址

最近项目中遇到要绘制一个橡皮擦类类似功能的模块。于是总结了下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、案例分析

      

[java] view
plain copy

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();  

    }  

    }  

  

  

    }  

      

  

  

     

  

  

     

  

  

     

  

  

    

    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: