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

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

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

时间: 2024-10-16 06:08:52

android tv 全屏幕垂直画的相关文章

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; impor

Android TV开发总结(五)TV上屏幕适配总结

前言:前面几篇总结一些TV上的小Sample,开源到GitHub:https://github.com/hejunlin2013/TVSample, 点击链接,可以持续关注.今天总结下TV上屏幕适配.: 看下Agenda: 一.屏幕适配的一些背景知识 二.TV屏幕适配怎么适配?有哪些规则? 三.多屏幕适配,android读取res/drawable优先级是什么? 四.屏幕分辨率及density .densityDpi代码 一.屏幕适配的一些背景知识 介绍几个在Android屏幕适配上非常重要的名

android tv 实现颜色条滚动效果

直接贴代码: ColorView.java package com.xxx.demo; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Log; import android.view.V

android tv焦点特效实现浅析

Android TV上的焦点凸显特效相信大家都看到过,那么我们就来实现它吧,首先上张效果图. 先说一下实现原理,主要通过重写RelativeLayout实现item,之后在其中加入scalanimation动画效果.刚开始处理时,还是发现了一些问题,比如item放大后会被其他item遮挡,如何添加选中边框等等,以及动画的实现等等.下面放上实现细节. 首先是item的代码: <view xmlns:android="http://schemas.android.com/apk/res/and

第一个Android TV Launcher开源项目

Android TV Launcher开源项目 这个项目是机顶盒桌面,用来播放视频.显示图片.应用管理和其他针对机顶盒产品的设置.目前git和CSDN code上面都没有类似的开源项目,正好本人最近在开发类似产品,网上类似研究还非常少,完全自己实现还是比较困难.所以就把目前的项目开源出来,也有利于其他人少走弯路. git项目地址 CSDN code项目地址 项目框架结构 UI.adapter.实体类.图片cache.网络层. 这个层级关系还是和大部分项目是类似的. 功能模块的详细实现方式 这个部

Android Tv app 与 mobile app 界面呈现的区别

公司的一个项目是android tv的谢了片日报总结:android tv app呈现ui 与手机app的区别 android tv  app和 mobile app 的主要区别在表现形式上 1.焦点移动的处理 从代码上可以明显看出到处都有对焦点获取的处理,这是mobile app所不需要的. 触摸屏与遥控的不同操作方式决定了:tv遥控操作方式在屏幕上是先获取焦点(遥控决定焦点移动)再获取点击,而mobile触摸方式是直接的点击获取与焦点获取一起通常只需要处理点击获取 2.布局边界处理 遥控操作

TCL Android TV 开发环境搭建实录

要求:Eclipse版本3.5以上 ADT版本10.0.1 TCL的SDK(我看了看核心是Android2.2的API) 步骤: 1.下載SDK和TCL的模拟器 2.Eclipse安装ADT(版本一定要符合哦,要不不行) 3.Eclipse挂载SDK Eclipse环境中设置Window->Preferences,在弹出的对话框中选中第二项Android,在SDK Location中设置解压好的开发包文 件夹路径 4.用下载的TCL的模拟器(emulator.exe)把SDK路径/tools文件

Android TV APPs 的介绍与创建

最近开始接触到Andorid TV编程,发现目前这方便的资料与比较还比较少,但现在随着产品与用户的升级,涉及到Android TV与 Android Watch的编程离我们越来越近了,本篇博客开始,将以笔记的方式记录我Android TV从零到有的一个过程. 本博客创建步骤主要参考Android官方文档. Get Started with TV Apps TV应用程序使用相同的结构与手机和平板电脑.这种相似性意味着你也可以修改现有的应用程序运行在TV设备或创建新的应用程序基于你现在已经掌握的An

Android TV开发--实现延时关机功能(二)逻辑实现

模块功能描述(总述) 上一篇文章:Android TV开发--实现延时关机功能(一)功能描述 讲的是延时关机整体功能描述以及UI效果,这篇文章将着重讲解逻辑实现. 按照功能模块分为3部分:关机App.关机Service.Launcher 模块图如下: 关机App模块 主要功能:1.展示UI设置延时时长 2.取消延时关机 3.取消延时对话框倒计时功能 1.展示UI设置延时时长 此处即为延时关机功能入口: 1.布局及逻辑处理Activity如下,代码中含有注释: /** * 延时关机 */ publ