Android绘图基础3

使用Shader渲染器。
Shader渲染器主要对Paint画笔进行渲染。
Shader本身是一个抽象类,它提供了如下实现类。
BitmapShader:使用位图平铺的渲染效果。
LinearGradient:使用线性渐变来填充图形。
RadialGradient:使用圆形来渐变来填充图形。
SweepGradient:使用角度渐变来填充图形。
CompossShader:使用组合渲染来填充图形。

Matrix控制变换。重点内容
这个是Android提供的一个矩形工具类,它表示并不能对图像或者组件进行变换,
但是可以跟其他APi结合。
Matrix提供了如何方法来控制平移,旋转,和缩放。

  1. setTranslate(float dx ,float dy):控制Matrix进行平移。
  2. setRotate(float degrees):控制matrix进行旋转,degrees控制旋转的角度。
  3. setRotate(float degrees,float px,float py):设置以px,py为轴心进行旋转,degrees控制旋转角度。
  4. setSkew(float kx,float ky,float px,float py):控制Matrix以px,py为轴心进行倾斜。
    kx,ky 为 X,Y方向上的倾斜距离。
  5. setScale(float sx,float sy):设置Matrix进行缩放,sx,sy控制 x,y方法上缩放比例。
  6. setScalte(float sx,float sy,float px,float py):设置Matrix以px,py为轴心进行缩放,sx,sy控制X,Y 方向上的缩放比例。
package com.example.drawdemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;

public class MyView4 extends TextView {
    private LinearGradient mLinearGradient;

    private Matrix mGradientMatrix;
    private Paint mPaint;
    // 记录View的宽度
    private int mViewWidth = 0;
    // 记录平移
    private int mTranslate = 0;

    public MyView4(Context context) {
        this(context, null);

    }

    public MyView4(Context context, AttributeSet attrs) {
        this(context, attrs, 0);

    }

    public MyView4(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        // TODO Auto-generated method stub
        super.onSizeChanged(w, h, oldw, oldh);
        Log.e("View", "----onSizeChanged");
        if (mViewWidth == 0) {
            mViewWidth = getMeasuredWidth();
            if (mViewWidth > 0) {
                mPaint = getPaint();
                // 参数一为渐变起初点坐标x位置,参数二为y轴位置,参数三和四分辨对应渐变终点,最后参数为平铺方式,这里设置为镜像
                mLinearGradient = new LinearGradient(//
                        0, //
                        0, //
                        mViewWidth, //
                        0, //
                        new int[] { Color.RED, 0xffffffff, Color.BLUE }, //
                        null, //
                        Shader.TileMode.CLAMP);
                mPaint.setShader(mLinearGradient);
                mGradientMatrix = new Matrix();
            }
        }

    }

    // 通过矩阵的方式不断渐变效果,从而在绘制文字的时候,产生闪动效果。
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        Log.e("View", "----onDraw");
        if (mGradientMatrix != null) {
            mTranslate += mViewWidth / 6;

            if (mTranslate > 2 * mViewWidth) {
                mTranslate = -mViewWidth;
            }
            Log.e("tan","mTranslate"+mTranslate);
            // 控制Matrix进行平移。
            mGradientMatrix.setTranslate(mTranslate, 0);
            // mLinearGradient线性渐变设置当地Matrix。
            mLinearGradient.setLocalMatrix(mGradientMatrix);
            // 使用postInvalidate()刷新界面 每100毫秒刷新一次
            postInvalidateDelayed(150);
        }

    }

}

这里写图片描述

Matrix 基础

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值