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

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





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

  • 相关阅读:
    Freemaker Replace函数的正则表达式运用
    [Android]使用Spring for Android改善数据交互流程
    [Freemarker]自定义时间戳函数
    [jquery.validate]自定义方法实现"手机号码或者固定电话"的逻辑验证
    [Javascript]网页链接加上时间戳防止串用户
    支付系统设计
    java设计模式-抽象工厂模式
    IDEA解决maven多module出现多root的问题
    java设计模式-工厂方法模式
    java设计模式-单例模式
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4728910.html
Copyright © 2011-2022 走看看