关闭

自定义View(一)

328人阅读 评论(0) 收藏 举报
分类:

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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:36157次
    • 积分:755
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:3篇
    • 译文:1篇
    • 评论:3条
    最新评论