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

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





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

  • 相关阅读:
    配置secondarynamenode主机名masters
    配置secondarynamenode主机名masters
    Redis 数据备份与恢复
    Redis 数据备份与恢复
    以太坊:Go、Java、Python、Ruby、JS客户端介绍
    以太坊:创建安全多签名钱包及高级设置
    以太坊:导入预售钱包,更新、备份、恢复账号
    以太坊客户端的选择与安装
    以太坊:C++客户端的安装与定制(一)
    2019最受欢迎数据库:MySQL居首PostgreSQL第二Oracle位列第八
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4728910.html
Copyright © 2011-2022 走看看