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.View;
import android.view.WindowManager;
/**
 * 色彩效果view1
 */
public class ColorView extends View {
    int width;
    int height;
    Paint p;
    int i = 0;
    int all = 256 * 5;//颜色值变化
    int exteraLength = 1;
    Context context = null;
    int j = 0;
    int mLength = 0;//每次重绘时j的增量值

    public ColorView(Context context) {
        super(context);
        this.context = context;
        WindowManager wm = (WindowManager) getContext().getSystemService(
                Context.WINDOW_SERVICE);
        width = wm.getDefaultDisplay().getWidth();
        height = wm.getDefaultDisplay().getHeight();
        //判断是否是标准的高度
        System.out.println("width==" + width);
        System.out.println("height==" + height);
        p = new Paint();
        if (all >= width) {
            mLength = 80;
        } else {
            mLength = 30;
            exteraLength = (int) Math.ceil(1.0 * all / (width - all));
        }
        this.setFocusable(true);
        this.setKeepScreenOn(true);
        i = 0;
    }
    public ColorView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
        this.context = context;
        WindowManager wm = (WindowManager) getContext().getSystemService(
                Context.WINDOW_SERVICE);
        width = wm.getDefaultDisplay().getWidth();
        height = wm.getDefaultDisplay().getHeight();
        System.out.println("width==" + width);
        System.out.println("height==" + height);
        p = new Paint();
        p.setAntiAlias(true);
        p.setStyle(Paint.Style.FILL);
        if (all >= width) {
            mLength = 80;
        } else {
            mLength = 30;
            exteraLength = (int) Math.ceil(1.0 * all / (width - all));
        }
        this.setFocusable(true);
        this.setKeepScreenOn(true);
        i = 0;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (j > all) {
            //结束的情况。还是需要绘制的,不然界面会变黑
            myDraw(canvas);
            System.out.println("end");
            return;
        }
        myDraw(canvas);
        j+=mLength;//改变j的值
        invalidate();//onDraw后,重新绘制view,主观上产生动画效果
    }

    public void myDraw(Canvas canvas) {
// 创建画笔
//		红(R:255 G:0 B:0)
//		橙(R:255 G:156 B:0)
//		黄(R:255 G:255 B:0)
//		绿(R:0 G:255 B:0)
//		青(R: G:255 B:255)
//		蓝(R:0 G:0 B:255)
//		紫(R:255 G: B:255)
        System.out.println("canvas");
        Log.i("Canvas:X:", "complexdraw");
        i = 0;
        while (i <= j) {
            if (i <= 255) {
                p.setColor(Color.rgb(255, i, 0));
            } else if (i >= 256 && i <= 511) {
                p.setColor(Color.rgb(511 - i, 255, 0));
            } else if (i >= 512 && i <= 767) {
                p.setColor(Color.rgb(0, 255, i - 512));
            } else if (i >= 768 && i <= 1023) {
                p.setColor(Color.rgb(0, 1023 - i, 255));
            } else if (i >= 1024 && i <= 1279) {
                p.setColor(Color.rgb(i - 1024, 0, 255));
            }
            //处理不同的分辨率,造成画图的差异性,均分颜色值,屏幕宽度1280,颜色值的范围也是1280刚刚好,如果是小米电视的,屏幕宽度为1920,多出来的,需要均分,下面便是处理方式
            if (exteraLength != 1) {
                if (i % exteraLength == exteraLength - 1) {
                    System.out.println("exteraLength==" + exteraLength);
                    System.out.println("current==" + i);
                    canvas.drawLine(i + i / exteraLength, 0, i + i / exteraLength, height, p);//画线
                    canvas.drawLine(i + i / exteraLength + 1, 0, i + i / exteraLength + 1, height, p);
                } else {
                    System.out.println("exteraLength==1--------->" + exteraLength);
                    System.out.println("current==" + i);
                    canvas.drawLine(i + i / exteraLength, 0, i + i / exteraLength, height, p);
                }
            } else {
                canvas.drawLine(i, 0, i, height, p);
            }
            i++;
        }
    }
}

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_color);
    }
}

activity_color.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">
    <com.xxx.demo.ColorView
            android:id="@+id/colorView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            />
</LinearLayout>

在自定义view中的onDraw()方法中,调用invalidate()方法,可以实现类似于小球移动的效果。。

android tv 实现颜色条滚动效果

时间: 2024-12-20 15:18:25

android tv 实现颜色条滚动效果的相关文章

Android广告条滚动效果

一.效果图 二.主要技术点 1.ViewPager的使用 2.背景选择器 3.自动播放 三.示例代码 1.布局文件:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_p

android TV选中时高亮凸显效果

链接: http://pan.baidu.com/s/1pLjAFQ7 密码: xb8g <ignore_js_op> 360手机助手截图0410_18_02_01.png (335.64 KB, 下载次数: 1) 下载附件 2014-4-10 18:03 上传  <ignore_js_op> 360手机助手截图0410_18_02_02.png (340.2 KB, 下载次数: 0) 选中放大 <ignore_js_op> 360手机助手截图0410_18_02_03

详解用CSS3制作圆形滚动进度条动画效果

内  容 先看一下效果图,会提升我们的学习兴趣哟: 对于圆形效果是重点,我将详细讲解. 第一种效果: html结构: <div id="progress"> <span></span> </div> css样式: #progress{ width: 50%; height: 30px; border:1px solid #ccc; border-radius: 15px; margin: 50px 0 0 100px; overflow:

Android 中带有进度条效果的按钮(Button)

安卓中带有进度条效果的按钮,如下图: 1.布局文件如下activity_main.xml 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="fill_parent" 4 android:layo

[androidUI特效]android中TextView中如何设置水平滚动效果

如何让文本实现走马灯的效果,下面就一起实现下吧~~~~~~ package irdc.ScrollingText; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class ScrollingText extends Activity { public TextView t1; /** Called when the activity is first c

Android TV界面聚焦效果---凸显效果

Android TV端应用程序的开发时,在聚焦效果上往往是将图标发大并且凸显到最上层来显示,如下图的效果. 该聚焦凸显效果有两种可行的实现方案,不过太麻烦了. 1)全两层布局,所谓全两层布局,就是图标显示层和聚焦凸显层分开,他们是完全重叠的两层.这种方式在程序上是非常不好办的,既要实现焦点转换又要实现上层凸显控件的消失或不消失状态,状态和逻辑都非常复杂. 2)部分两层布局,所谓部分两层布局,就是底层放需要呈现的图标,上层就只有2个可移动的图标,底层哪个图标获取了焦点,那么上层的焦点发大图标就马上

进度条控件CProgressCtrl实现进度滚动效果

关于CProgressCtrl 控件的基本操作网上有很多资料,可我想实现进度条中进度滚动效果,即很多时候程序出现的等待或启动画面,如下图: 实现这个效果的函数为SetMarquee(_In_ BOOL fMarqueeMode, _In_ int nInterval),第一个参数为开关,第二个参数指定滚动时间.且控件应该包含 PBS_MARQUEE风格,eg:m_ProgressCtl.Create(WS_CHILD|WS_VISIBLE|PBS_MARQUEE,CRect(100,200,25

Android ViewPager 实现自动滚动效果

Android 中使用ViewPager 并实现自动滚动效果. 学习自:自己研究 OverView 我们在很多软件中都见过一下的效果,他的效果就是在在 APP的顶部会个自动滚动的View在滑动,那么我们看一下如何使用他吧. ViewPager的自动滚动效果 在 2019-12-27 日 我发过一篇 Android 中如何使用ViewPager的文章,如果你还不会ViewPager的基础使用,那么我觉得你可以去看一下.链接. 好了不多废话,我们看一下如何去实现ViewPager的自动滚动的效果.

Android 自学之拖动条SeekBar

拖动条(SeekBar)和进度条非常相似,只是进度条采用颜色填充来表明进度完成的程度,而拖动条则通过滑块的位置来标识数值----而且拖动条允许用户拖动滑动块来改变值,因此拖动条通常用于对系统的某种数值进行调节,比如音量调节. SeekBar允许用户改变拖动条的滑块外观,改变滑块外观通过如下属性来指定 android:thumb  指定一个Drawable对象,该对象将作为自定义滑块. 为了让程序能响应拖动条滑块位置的改变,程序可以考虑为他绑定一个OnSeekBarChangerListener监