`
China_qd_zjk
  • 浏览: 34511 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Android TV HorizontalScrollView 图片轮播 遥控器左右按键的处理

阅读更多
/**
     * 加载下一张图片
     */
    protected void loadNextImg()
    {
        View view;

//        int oldViewPos = mContainer.getChildCount() - 1;
//        mViewPos.remove(mContainer.getChildAt(oldViewPos));
//        mContainer.removeViewAt(oldViewPos);
        //移除第一张图片,且将水平滚动位置置0
//        scrollTo(0, 0);
        mViewPos.remove(mContainer.getChildAt(0));
        mContainer.removeViewAt(0);
        //获取下一张图片,并且设置onclick事件,且加入容器中
        Log.d("mContainer"," mCurrentIndex=" + mCurrentIndex + " mAdapter.getCount()  = " + mAdapter.getCount() );
        if(mCurrentIndex == mAdapter.getCount() - 1){
            Log.d("mCurrentIndex","mCurrentIndex = " + mCurrentIndex);
            Log.d("mAdapter.getCount() - 1","mAdapter.getCount() - 1 = " + mAdapter.getCount());

            view = mAdapter.getView(0, null, mContainer);
            Log.d("view","0 = " + 0);

            mCurrentIndex = 0;
        }else{
            view = mAdapter.getView(++mCurrentIndex, null, mContainer);

            Log.d("view","mCurrentIndex = " + mCurrentIndex);

        }
        view.setOnClickListener(this);
        mContainer.addView(view);
        Log.d("mCurrentIndex",mCurrentIndex + "");
//        if(keyCodevalue == 1){
//            mViewPos.put(view, mCurrentIndex - 1);
//        } else{
            mViewPos.put(view, mCurrentIndex);
//        }

        Log.d("mContainer","++++++++ mCurrentIndex=" + mCurrentIndex + " mAdapter.getCount()  = " + mAdapter.getCount() );
//此处试验很多次 只能这样将诶绝了,但是滑动还有一点问题
//删掉一下两行,即可
        //scrollTo((findViewById(R.id.id_gallery).getWidth()), 0);

        //smoothScrollBy(-(findViewById(R.id.id_gallery).getWidth()), 0);

        Log.d("id",(findViewById(R.id.id_gallery).getWidth()) + "");
        Log.d("mChildWidth",mChildWidth + "");
        //当前第一张图片小标
        if(mFristIndex == mAdapter.getCount() - 1){
            mFristIndex = 0;
        } else {
            mFristIndex++;
        }
        Log.d(TAG,mFristIndex + " ");
        //如果设置了滚动监听则触发

        Log.d("mContainer","++++++++ mCurrentIndex=" + mCurrentIndex + " mFristIndex  = " + mFristIndex );
    }


/**
     * 加载前一张图片
     */
    protected void loadPreImg()
    {
        int oldViewPos = mContainer.getChildCount() - 1;
        Log.d("oldViewPos","oldViewPos = "+ oldViewPos);
        Log.d("mFristIndex","mFristIndex = "+ mFristIndex);
        if (mFristIndex == 0) {
            mViewPos.remove(mContainer.getChildAt(oldViewPos));
            mContainer.removeViewAt(oldViewPos);
            View view = mAdapter.getView(mAdapter.getCount() - 1, null,
                    mContainer);
            Log.d("view","mAdapter.getCount() - 1" + mAdapter.getCount());
            mViewPos.put(view, mAdapter.getCount() - 1);
            mContainer.addView(view, 0);
            view.setOnClickListener(this);
            // 水平滚动位置向左移动view的宽度个像素
            scrollTo(0, 0);
            Log.d("mChildWidth","mChildWidth ="+mChildWidth);
            mFristIndex = mAdapter.getCount() - 1;
            Log.d("mFristIndex","mFristIndex = "+mFristIndex);
        } else {
            int index = mCurrentIndex - mCountOneScreen;
            Log.d("mCurrentIndex","mCurrentIndex "+ mCurrentIndex);
            Log.d("mCountOneScreen","mCountOneScreen "+ mCountOneScreen);
            Log.d("index","mCurrentIndex - mCountOneScreen = "+ index);
            if (index >= 0) {
                mViewPos.remove(mContainer.getChildAt(oldViewPos));
                mContainer.removeViewAt(oldViewPos);
                View view = mAdapter.getView(index, null, mContainer);
                Log.d("view","index = " + index);
                mViewPos.put(view, index);
                mContainer.addView(view, 0);
                view.setOnClickListener(this);
                // 水平滚动位置向左移动view的宽度个像素
                scrollTo(0, 0);
                Log.d("mChildWidth","mChildWidth = "+mChildWidth);
                mFristIndex--;
                Log.d("mFristIndex","mFristIndex = "+mFristIndex);
            } else {
                mViewPos.remove(mContainer.getChildAt(oldViewPos));
                mContainer.removeViewAt(oldViewPos);
                View view = mAdapter.getView(index + mAdapter.getCount(), null,
                        mContainer);
                Log.d("view","index + mAdapter.getCount() = " + index + mAdapter.getCount());
                mViewPos.put(view, index + mAdapter.getCount());
                mContainer.addView(view, 0);
                view.setOnClickListener(this);
                // 水平滚动位置向左移动view的宽度个像素
                scrollTo(0, 0);
                Log.d("mChildWidth","mChildWidth = "+mChildWidth);
                // 当前位置--,当前第一个显示的下标--
                mFristIndex--;
                Log.d("mFristIndex","mFristIndex = "+mFristIndex);
            }
        }
        mCurrentIndex = mViewPos
                .get(mContainer.getChildAt(mCountOneScreen - 1));
        Log.d("mCurrentIndex","mCurrentIndex = "+mCurrentIndex);
    }

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub

        if(keyCode == event.KEYCODE_DPAD_LEFT){

            Log.d("keyCodevalue","keyCodevalue = " + keyCodevalue);
            if(keyCodevalue == 2){
                Log.d("keyCodevalue","zhixing = " + keyCodevalue);
            } else {
                loadPreImg();
            }

            keyCodevalue = 1;
        }else if(keyCode == event.KEYCODE_DPAD_RIGHT){

            Log.d("keyCodevalue","keyCodevalue = " + keyCodevalue);
            if(keyCodevalue == 1){
                Log.d("keyCodevalue","zhixing = " + keyCodevalue);

            } else {
                loadNextImg();
            }
            keyCodevalue = 2;
            //阻止右键自己的处理方式
            if(keyCodevalue == 1){  //当之前按下的是鼠标左键的情况下,执行
                for (int i = 0; i < mContainer.getChildCount(); i++)
                {
                    mContainer.getChildAt(i).setBackgroundColor(Color.WHITE);
                }

                mListener.onCurrentImgChanged(mFristIndex, mContainer.getChildAt(0));
            } else {
                for (int i = 0; i < mContainer.getChildCount(); i++)
                {
                    mContainer.getChildAt(i).setBackgroundColor(Color.WHITE);
                }

                mListener.onCurrentImgChanged(mFristIndex, mContainer.getChildAt(1));
            }
            return true;
        }
        if(keyCodevalue == 1){  //当之前按下的是鼠标左键的情况下,执行
            for (int i = 0; i < mContainer.getChildCount(); i++)
            {
                mContainer.getChildAt(i).setBackgroundColor(Color.WHITE);
            }

            mListener.onCurrentImgChanged(mFristIndex, mContainer.getChildAt(0));
        } else {
            for (int i = 0; i < mContainer.getChildCount(); i++)
            {
                mContainer.getChildAt(i).setBackgroundColor(Color.WHITE);
            }

            mListener.onCurrentImgChanged(mFristIndex, mContainer.getChildAt(1));
        }

        Log.d("keyCodeValue","mFristIndex = " + mFristIndex);
        return super.onKeyDown(keyCode, event);
    }
分享到:
评论

相关推荐

    android高仿网易新闻客户端,title可以动态添加或减少

    Android TV或STB应用通常需要遵循Leanback库提供的设计指南,以确保遥控器操作的便利性。可以使用 Leanback Support Library 中的BrowseFragment和DetailsFragment,它们为电视界面提供了一种标准布局,便于遥控器...

    java-ssm+vue旅游资源网站实现源码(项目源码-说明文档)

    旅游资源网站的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、景点信息管理、购票信息管理、酒店信息管理、客房类型管理、客房信息管理、客房预订管理、交流论坛、系统管理,用户:首页、个人中心、购票信息管理、客房预订管理、我的收藏管理,前台首页;首页、景点信息、酒店信息、客房信息、交流论坛、红色文化、个人中心、后台管理、客服等功能。 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7+ 后端技术:ssm 前端技术:Vue 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog

    【高创新】基于粒子群优化算法PSO-Transformer-BiLSTM实现故障识别Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    这里收集那些神奇的产品经理为我们带来的意想不到的产品功能和改版,又称_MDZZ_PM_awesome-pm.zip

    这里收集那些神奇的产品经理为我们带来的意想不到的产品功能和改版,又称_MDZZ_PM_awesome-pm

    AI City track 5数据集-voc-xml格式

    有戴头盔的人、未戴头盔的人、摩托车三种类别,包含736张图像、对应voc格式标签(xml)

    4-3_Business_BLUE_2017_16-CL-20180524MTAX.potx

    微软演示材料

    VB075期刊信息管理系统(SQL).7z

    VB075期刊信息管理系统(SQL).7z

    西门子SMART200程序 PID的控制写法,突破8路,PID直接做成子程序,无密码,直接调用

    西门子SMART200程序 PID的控制写法,突破8路,PID直接做成子程序,无密码,直接调用。

    VBATM校园自动银行系统设计(源代码+论文).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、5资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    基于深度学习的移动物体检测分类源码

    基于YOLOv5的物体检测识别与分类系统,可根据不同的权重模型对不同的物体进行识别,整体分为图片、视频和摄像头三个检测模块,具体检测能力依据模型而定。

    PMSM滑模控制仿真无位置 永磁电机 可提供文档if启动 如果没有收敛,将1e-4搞小一点 e-6或者e-5试下 本次滑模模型

    PMSM滑模控制仿真无位置 永磁电机 可提供文档if启动 如果没有收敛,将1e-4搞小一点 e-6或者e-5试下 本次滑模模型文档包括: 1 simulink界面调整,由于使用这个仿真的时候很可能会出现因为软件环境不同导致无法使用, 或者导致的波形错误,特写了一个关于参数界面的设置,按照那个设置,结合主框图,能够 避免使用出问题。 2 波形记录,将转速波形,转矩波形,位置估计+实际位置波形,三项定子电流波形, 给定转速(蓝绿色)+实际转速(红色)+估算转速(蓝色) 3 另外仿真程序内部,里面标注了各个功能模块的位置及部分原理。 4 lunwen的话推荐看 13 16 开头的lunwen,其他的可以拓展性的看。

    60-AspNet8-jQery-Datatables-5-Code.zip

    构建使用jQuery组件DataTables.net的Asp.Net 8 MVC应用程序的实用指南。

    皮层微创脑机接口传感器的发展现状与未来趋势

    内容概要:文章探讨了皮层微创脑机接口(BCI)传感器作为神经电信号采集与调控装置,在临床上的应用现状与科研进展,并分析了传感器在未来可能的发展趋势和技术革新点。介绍了现有商业化及实验级别的电极器材,并讨论了其如何进一步向着高通量、软界面与更持久的生命设计演化。 适合人群:神经工程专业科研工作者,尤其是关注BCI传感器领域的研究生、教师和其他相关专业的科研人士。 使用场景及目标:旨在增进从业者对于皮层微创BCI的理解,特别是传感器的设计、制作工艺和未来可能的方向;有助于科研与产品研发。 其他说明:文章还强调了技术创新在材料与设计理念层面的重要性,为BCI传感器在实际医疗与神经科研中发挥作用打下了坚实的基础。

    基于python实现的社会力模型仿真+源码+文档(毕业设计&课程设计&项目开发)

    基于python实现的社会力模型仿真+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于python实现的社会力模型仿真+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于python实现的社会力模型仿真+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于python实现的社会力模型仿真+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于python实现的社会力模型仿真+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于python实现的社会力模型仿真+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~

    2024.9.18 作业

    2024.9.18 作业

    Python环境一键安装脚本,适用于Linux_lxspacepy.zip

    Python环境一键安装脚本,适用于Linux_lxspacepy

    昕一 - 一样的月光 [qmms2].mp3

    昕一 - 一样的月光 [qmms2].mp3

    【高创新】基于凌日优化算法TSOA-Transformer-BiLSTM实现故障识别Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    http服务器的实现.7z

    http服务器的实现.7z

    java-ssm+vue高校奖学金管理系统实现源码(项目源码-说明文档)

    高校奖学金管理系统的主要实现功能包括:管理员:首页、个人中心、学生管理、辅导员管理、教务处管理、奖学金类型管理、奖学金信息管理、学生成绩管理、奖惩信息管理、奖学金申请管理、公告信息管理。学生:首页、个人中心、奖学金信息管理、学生成绩管理、奖惩信息管理、奖学金申请管理、公告信息管理,辅导员;首页、个人中心、学生管理、学生成绩管理、奖惩信息管理、奖学金申请管理、公告信息管理,教务处;首页、个人中心、学生管理、学生成绩管理、奖惩信息管理、奖学金申请管理、公告信息管理 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7+ 后端技术:ssm 前端技术:Vue 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog

Global site tag (gtag.js) - Google Analytics