Android应用开发之Android TV HorizontalScrollView 图片轮播 遥控器左右按键的处理
白羽 2018-08-10 来源 :网络 阅读 2389 评论 0

摘要:本文将带你了解Android应用开发之Android TV HorizontalScrollView 图片轮播 遥控器左右按键的处理,希望本文对大家学Android有所帮助

        本文将带你了解Android应用开发之Android TV HorizontalScrollView 图片轮播 遥控器左右按键的处理,希望本文对大家学Android有所帮助


/**
     * 加载下一张图片
     */
    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频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程