1、paint相关
/** (转)
* Paint类介绍
*
* Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,
* 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,
* 大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。
*
* 1.图形绘制
* setARGB(int a,int r,int g,int b);
* 设置绘制的颜色,a代表透明度,r,g,b代表颜色值。
*
* setAlpha(int a);
* 设置绘制图形的透明度。
*
* setColor(int color);
* 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。
*
* setAntiAlias(boolean aa);
* 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。
*
* setDither(boolean dither);
* 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰
*
* setFilterBitmap(boolean filter);
* 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示
* 速度,本设置项依赖于dither和xfermode的设置
*
* setMaskFilter(MaskFilter maskfilter);
* 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等 *
* setColorFilter(ColorFilter colorfilter);
* 设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果
*
* setPathEffect(PathEffect effect);
* 设置绘制路径的效果,如点画线等
*
* setShader(Shader shader);
* 设置图像效果,使用Shader可以绘制出各种渐变效果
*
* setShadowLayer(float radius ,float dx,float dy,int color);
* 在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色
*
* setStyle(Paint.Style style);
* 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE
*
* setStrokeCap(Paint.Cap cap);
* 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式
* Cap.ROUND,或方形样式Cap.SQUARE
*
* setSrokeJoin(Paint.Join join);
* 设置绘制时各图形的结合方式,如平滑效果等
*
* setStrokeWidth(float width);
* 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度
*
* setXfermode(Xfermode xfermode);
* 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果
*
* 2.文本绘制
* setFakeBoldText(boolean fakeBoldText);
* 模拟实现粗体文字,设置在小字体上效果会非常差
*
* setSubpixelText(boolean subpixelText);
* 设置该项为true,将有助于文本在LCD屏幕上的显示效果
*
* setTextAlign(Paint.Align align);
* 设置绘制文字的对齐方向
*
* setTextScaleX(float scaleX);
* 设置绘制文字x轴的缩放比例,可以实现文字的拉伸的效果
*
* setTextSize(float textSize);
* 设置绘制文字的字号大小
*
* setTextSkewX(float skewX);
* 设置斜体文字,skewX为倾斜弧度
*
* setTypeface(Typeface typeface);
* 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等
*
* setUnderlineText(boolean underlineText);
* 设置带有下划线的文字效果
*
* setStrikeThruText(boolean strikeThruText);
* 设置带有删除线的效果
*
*/
测试代码如下
package com.myapp.drawview;
import java.util.Random;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Cap;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
public class MyView extends View {
int rotateDegree=0;
int[] rands={0,0,0,0};
int[] temp={10,10,10,10};
Random rand=new Random();;
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public MyView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Paint p=new Paint();
p.setColor(Color.RED);
p.setTextSize(50f);
//画文本
canvas.drawText("圆形", 100, 100, p);
//画圆
canvas.drawCircle(300, 80, 80, p);
p.setAntiAlias(true);
canvas.drawCircle(300, 260, 80, p);
//画线
canvas.drawLine(50, 270, 80, 350, p);
//画弧线
p.setStyle(Paint.Style.STROKE);
RectF oval=new RectF(50,400,150,500);
canvas.drawArc(oval, 90, 270, false, p);
p.setStrokeCap(Cap.ROUND);//设置边角圆润
//不断旋转的两个圆弧
p.setColor(Color.BLACK);
p.setStrokeWidth(5f);
oval=new RectF(55,605,265,815);
canvas.drawArc(oval, -90, 360, false, p);
p.setColor(Color.RED);
p.setStrokeWidth(10f);
oval=new RectF(52,602,267,818);
canvas.drawArc(oval, -90+rotateDegree,90, false, p);
canvas.drawArc(oval, 90+rotateDegree,90, false, p);
if(rotateDegree!=360)
rotateDegree+=2;
else
rotateDegree=0;
this.invalidate();
//画不断变化的文字
canvas.drawText(""+rotateDegree, 120, 880, p);
//画四条长短变化的直线,类似音乐播放器音柱效果
p.setColor(Color.parseColor("#007fD8"));
p.setStrokeWidth(5);
for(int i=0;i<4;i++){
if(rands[i]<temp[i])
rands[i]+=2;
else{
rands[i]-=2;
temp[i]=0;
}
if(temp[i]<=0&&rands[i]<=0)
temp[i]=rand.nextInt(100);
canvas.drawLine(90f+50*i, 711f-rands[i]/2, 90f+50*i, 711f+rands[i]/2, p);
}
}
}