zoukankan      html  css  js  c++  java
  • LinearGradient线性渲染

    1. import android.content.Context;  
    2. import android.graphics.Canvas;  
    3. import android.graphics.Color;  
    4. import android.graphics.LinearGradient;  
    5. import android.graphics.Paint;  
    6. import android.graphics.Shader;  
    7. import android.view.View;  
    8.   
    9. /** 
    10.  * @version 2012-8-14 上午10:45:28 
    11.  **/  
    12. public class myGameView extends View implements Runnable {  
    13.     int bitwidth = 0;  
    14.     int bitheight = 0;  
    15.     Paint mPaint = null;  
    16.     // 线性渐变渲染  
    17.     Shader mLinearGradient1 = null;  
    18.     // 线性渐变渲染  
    19.     Shader mLinearGradient2 = null;  
    20.     // 线性渐变渲染  
    21.     Shader mLinearGradient3 = null;  
    22.   
    23.     public myGameView(Context context) {  
    24.         super(context);  
    25.         // 创建LinearGradient并设置渐变颜色数组  
    26.         // 第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置  
    27.         // 第三个,第四个参数表示渐变终点  
    28.         // 第五个参数表示渐变颜色  
    29.         // 第六个参数可以为空,表示坐标,值为0-1 new float[] {0.25f, 0.5f, 0.75f, 1 }  
    30.         // 如果这是空的,颜色均匀分布,沿梯度线。  
    31.         // 第七个表示平铺方式  
    32.         // CLAMP重复最后一个颜色至最后  
    33.         // MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果  
    34.         // REPEAT重复着色的图像水平或垂直方向  
    35.         mLinearGradient1 = new LinearGradient(0, 0, 0, 100, new int[] {  
    36.                 Color.RED, Color.GREEN, Color.BLUE, Color.WHITE }, null,  
    37.                 Shader.TileMode.CLAMP);  
    38.         mLinearGradient2 = new LinearGradient(0, 0, 0, 100, new int[] {  
    39.                 Color.RED, Color.GREEN, Color.BLUE, Color.WHITE }, null,  
    40.                 Shader.TileMode.MIRROR);  
    41.         mLinearGradient3 = new LinearGradient(0, 0, 0, 100, new int[] {  
    42.                 Color.RED, Color.GREEN, Color.BLUE, Color.WHITE }, null,  
    43.                 Shader.TileMode.REPEAT);  
    44.         mPaint = new Paint();  
    45.         new Thread(this).start();  
    46.     }  
    47.   
    48.     @Override  
    49.     protected void onDraw(Canvas canvas) {  
    50.         // LinearGradient的高度只有100而绘制的矩形有200所以才会有重复  
    51.         // 如果高度两者相同clamp重复是看不出效果的  
    52.         Paint paint = new Paint();  
    53.         paint.setTextSize(20);  
    54.         paint.setColor(Color.WHITE);  
    55.         // 绘制渐变的矩形  
    56.         mPaint.setShader(mLinearGradient1);  
    57.         canvas.drawRect(0, 0, 200, 200, mPaint);  
    58.         canvas.drawText("CLAMP", 0, 200 + 20, paint);  
    59.         // 绘制渐变的矩形  
    60.         mPaint.setShader(mLinearGradient2);  
    61.         canvas.drawRect(0, 250, 200, 450, mPaint);  
    62.         canvas.drawText("MIRROR", 0, 450 + 20, paint);  
    63.         // 绘制渐变的矩形  
    64.         mPaint.setShader(mLinearGradient3);  
    65.         canvas.drawRect(0, 500, 200, 700, mPaint);  
    66.         canvas.drawText("REPEAT", 0, 700 + 20, paint);  
    67.     }  
    68.   
    69.     @Override  
    70.     public void run() {  
    71.         while(!Thread.currentThread().isInterrupted()) {  
    72.             try {  
    73.                 Thread.sleep(100);  
    74.             }  
    75.             catch(Exception e) {  
    76.                 Thread.currentThread().interrupt();  
    77.             }  
    78.             postInvalidate();  
    79.         }  
    80.     }  
    81. }  
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.LinearGradient;
    import android.graphics.Paint;
    import android.graphics.Shader;
    import android.view.View;
    
    /**
     * @version 2012-8-14 上午10:45:28
     **/
    public class myGameView extends View implements Runnable {
        int bitwidth = 0;
        int bitheight = 0;
        Paint mPaint = null;
        // 线性渐变渲染
        Shader mLinearGradient1 = null;
        // 线性渐变渲染
        Shader mLinearGradient2 = null;
        // 线性渐变渲染
        Shader mLinearGradient3 = null;
    
        public myGameView(Context context) {
            super(context);
            // 创建LinearGradient并设置渐变颜色数组
            // 第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置
            // 第三个,第四个参数表示渐变终点
            // 第五个参数表示渐变颜色
            // 第六个参数可以为空,表示坐标,值为0-1 new float[] {0.25f, 0.5f, 0.75f, 1 }
            // 如果这是空的,颜色均匀分布,沿梯度线。
            // 第七个表示平铺方式
            // CLAMP重复最后一个颜色至最后
            // MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果
            // REPEAT重复着色的图像水平或垂直方向
            mLinearGradient1 = new LinearGradient(0, 0, 0, 100, new int[] {
                    Color.RED, Color.GREEN, Color.BLUE, Color.WHITE }, null,
                    Shader.TileMode.CLAMP);
            mLinearGradient2 = new LinearGradient(0, 0, 0, 100, new int[] {
                    Color.RED, Color.GREEN, Color.BLUE, Color.WHITE }, null,
                    Shader.TileMode.MIRROR);
            mLinearGradient3 = new LinearGradient(0, 0, 0, 100, new int[] {
                    Color.RED, Color.GREEN, Color.BLUE, Color.WHITE }, null,
                    Shader.TileMode.REPEAT);
            mPaint = new Paint();
            new Thread(this).start();
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            // LinearGradient的高度只有100而绘制的矩形有200所以才会有重复
            // 如果高度两者相同clamp重复是看不出效果的
            Paint paint = new Paint();
            paint.setTextSize(20);
            paint.setColor(Color.WHITE);
            // 绘制渐变的矩形
            mPaint.setShader(mLinearGradient1);
            canvas.drawRect(0, 0, 200, 200, mPaint);
            canvas.drawText("CLAMP", 0, 200 + 20, paint);
            // 绘制渐变的矩形
            mPaint.setShader(mLinearGradient2);
            canvas.drawRect(0, 250, 200, 450, mPaint);
            canvas.drawText("MIRROR", 0, 450 + 20, paint);
            // 绘制渐变的矩形
            mPaint.setShader(mLinearGradient3);
            canvas.drawRect(0, 500, 200, 700, mPaint);
            canvas.drawText("REPEAT", 0, 700 + 20, paint);
        }
    
        @Override
        public void run() {
            while(!Thread.currentThread().isInterrupted()) {
                try {
                    Thread.sleep(100);
                }
                catch(Exception e) {
                    Thread.currentThread().interrupt();
                }
                postInvalidate();
            }
        }
    }

    效果图

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    [转贴]35岁之前成功12条法则
    any type,any name
    The quick brown fox jumps over the lazy dog.
    [总结]软件工程师笔试题目(C++)
    [转]IOCP介绍
    A simple IOCP Server/Client Class
    Flash for Linux
    看看你是否需要更新SYMBOL文件了??
    [转贴]The Code Project Visual C++ Forum FAQ
    (搜集)一些少走弯路的话语+参考信息
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4696551.html
Copyright © 2011-2022 走看看