zoukankan      html  css  js  c++  java
  • android tv 全屏幕垂直画

    它们的定义view

    采纳canvas双缓冲方式,它可以减少呈现时间。提高性能。

    StaggeredView.java

    源码例如以下:

    package com.xxx.demo;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.view.View;
    import android.view.WindowManager;
    public class StaggeredView extends View {
        int width;
        int height;
        Paint p;
        Bitmap bitmap = null;
        Canvas x = null;
    
        public StaggeredView(Context context) {
            super(context);
            WindowManager wm = (WindowManager) getContext().getSystemService(
                    Context.WINDOW_SERVICE);
            width = wm.getDefaultDisplay().getWidth();
            height = wm.getDefaultDisplay().getHeight();
            p = new Paint();
        }
    
        private void initMyCanvas() {
            p.setColor(Color.WHITE);// 设置绿色
            bitmap = Bitmap.createBitmap(20, 20, Bitmap.Config.ARGB_8888);
            // Create canvas.
            x = new Canvas();
            x.setBitmap(bitmap);
            p.setStyle(Paint.Style.STROKE);
            p.setAntiAlias(true);
            for (int i = 0; i <=20; i++) {
                changeColor(i, p);
                x.drawLine(i, 0, i, 20, p);// 画线
            }
        }
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            canvas.drawColor(Color.WHITE);
            // 创建画笔
            long startTime=System.currentTimeMillis();
            initMyCanvas();
            int bitWidth = bitmap.getWidth();
            int bitHeight = bitmap.getHeight();
            for (int i = 0; i < height; i += bitHeight) {
                for (int j = 0; j < width; j += bitWidth) {
    //                changeColor(i,j,p);
    //                canvas.drawPoint(i, j, p);
                    canvas.drawBitmap(bitmap, j, i, p);
                }
            }
            System.out.println("时间==="+(System.currentTimeMillis()-startTime));
        }
        /**
         * 改变画笔的颜色
         *
         * @param i
         * @param p
         */
        private void changeColor(int i, Paint p) {
            switch (i % 2) {
                case 0:
                    p.setColor(Color.WHITE);
                    break;
                case 1:
                    p.setColor(Color.BLACK);
                    break;
            }
        }
    }
    

    首先先画出一个小的矩形区域,创建一个canvas画在BitMap上,之后使用系统的canavas复用前面的BitMap,能够提高处理的效率。


    MainActivity.java

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(new StaggeredView(this));
        }
    }
    打印的结果例如以下:
     I/System.out: 时间===91



    方法二:

    StaggeredView2.java

    採用默认的方式。就是一个循环,画width个竖线。效率还是非常低下的。

    public class StaggeredView2 extends View {
        int width;
        int height;
        Paint p;
        Bitmap bitmap = null;
        Canvas x = null;
    
        public StaggeredView2(Context context) {
            super(context);
            WindowManager wm = (WindowManager) getContext().getSystemService(
                    Context.WINDOW_SERVICE);
            width = wm.getDefaultDisplay().getWidth();
            height = wm.getDefaultDisplay().getHeight();
            p = new Paint();
            initMyCanvas();
        }
    
        private void initMyCanvas() {
            p.setColor(Color.WHITE);// 设置绿色
            bitmap = Bitmap.createBitmap(20, 20, Bitmap.Config.ARGB_8888);
            // Create canvas.
            x = new Canvas();
            x.setBitmap(bitmap);
            p.setStyle(Paint.Style.STROKE);
            p.setAntiAlias(true);
            for (int i = 0; i <= 30; i++) {
                changeColor(i, p);
                x.drawLine(i, 0, i, 30, p);// 画线
            }
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            canvas.drawColor(Color.WHITE);
            // 创建画笔
            long startTime=System.currentTimeMillis();
            for (int i = 0; i < width; i++) {
                changeColor(i, p);
                canvas.drawLine(i,0, i, height - 1, p);
            }
            System.out.println("时间==="+(System.currentTimeMillis()-startTime));
        }
    
        /**
         * 改变画笔的颜色
         *
         * @param i
         * @param p
         */
        private void changeColor(int i, Paint p) {
            switch (i % 2) {
                case 0:
                    p.setColor(Color.WHITE);
                    break;
                case 1:
                    p.setColor(Color.BLACK);
                    break;
            }
        }
    }
    
    结果为:

    I/System.out: 时间===277

    相对前面的方式而言。效率是非常低下的。。





    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    js中Math.random()生成指定范围数值的随机数【转】
    JS绘制生成花瓣效果的方法【转】
    php 解决json_encode中文UNICODE转码问题【转】
    JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法【转】
    PHP数据类型转换(字符转数字,数字转字符)【转】
    PHP 数组转字符串,与字符串转数组【转】
    js中forEach,for in,for of循环的用法【转】
    layui下的checkbox用js如何选中它【转】
    js数组与字符串的相互转换方法【转】
    JS判断网页是否为手机打开【转】
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4728910.html
Copyright © 2011-2022 走看看