自定义View(一)

原创 2015年11月20日 09:40:48

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


自定义view 实现倒影

  • 2017年12月01日 16:55
  • 23.65MB
  • 下载

自定义View

  • 2017年11月19日 19:42
  • 392B
  • 下载

Android自定义View初探(二)——仿360垃圾清理

明天就是五一劳动节了,在这里先祝各位程序猿劳动节快乐,别在加班了!自从尝试过写自定义View(Android自定义View初探(一)——饼图)之后,每当看到别人的应用时,总是在想别人的实现方式,或许,...

自定义view(音量条)

  • 2017年11月09日 15:14
  • 19.83MB
  • 下载

安卓 自定义 View 进阶:绘制基本形状

在上一篇自定义View分类与流程中我们了解自定义View相关的基本知识,不过,这些东西依旧还是理论,并不能拿来(zhuang)用(B), 这一次我们就了解一些能(zhaung)用(B)的东西。 ...

Android自定义View

  • 2016年01月05日 17:54
  • 1.26MB
  • 下载

Android自定义控件3——边缘凹凸的卡劵效果View

前言最近做项目的时候遇到一个卡劵的效果,由于自己觉得用图片来做的话可以会出现适配效果不好,再加上自己自定义view方面的知识比较薄弱,所以想试试用自定义View来实现。但是由于自己知识点薄弱,一开始居...
  • yissan
  • yissan
  • 2016年05月16日 22:38
  • 10058

Android自定义View(一) -源码

  • 2016年08月26日 13:32
  • 34.14MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义View(一)
举报原因:
原因补充:

(最多只允许输入30个字)