HorizontalScrollView+GridView单排左右根据焦点来滑动和选中放大

             

 小菜之前一直接触的大都都是手机app,最近接了一个tv端的项目,要实现图片根据焦点来左右滚动,并且被选中的图片进行放大效果。偷了个懒直接套用了原来GridView的框架来进行更改,最后还是发现了两个比较尴尬的问题:

        1、GridView没法根据焦点来进行滑动;

        2、当页面出现多个焦点控件时,GridView第一次获取焦点没法监听;

既然已经入了坑,还是倔强的将错误进行到底,好了废话不多说上代码:

        buttomScrollView = (HorizontalScrollView) findViewById(R.id.home_hv_buttom);
        typeGridView = (GridView) findViewById(R.id.home_lgv_buttom);

//主要通过HorizontalScrollView来进行滑动,主要根据数据大小来设置GridView的宽度和setNumColumns即可

  1. ViewGroup.LayoutParams params = typeGridView .getLayoutParams();
  2.                         params.width = 209 * dianboBigTypeInfo.dianboType.size();
  3.                         typeGridView.setLayoutParams(params);
  4.                         typeGridView.setNumColumns(dianboBigTypeInfo.dianboType .size())

//实现焦点来进行滑动,给HorizontalScrollView设置smoothScrollTo()

  1. OnItemSelectedListener dianboTypeItemListener = new OnItemSelectedListener() {
  2.         @Override
  3.         public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
  4.                 long arg3) {
  5.             buttomScrollView.smoothScrollTo(arg2 * 210, 0);
  6.         }
  7.         @Override
  8.         public void onNothingSelected(AdapterView<?> arg0) {
  9.             // TODO Auto-generated method stub
  10.         }
  11.     };

/**放大效果又如何实现呢,同样,懒人有懒人的办法,直接在GridView设置OnItemSelectedListener进行的item选中监听,利用notifyDataSetChanged()进行页面刷新即可*/

  1. OnItemSelectedListener dianboTypeItemListener = new OnItemSelectedListener() {
  2.         @Override
  3.         public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
  4.                 long arg3) {
  5.             buttomScrollView.smoothScrollTo(arg2 * 210, 0);
  6.             HomeDianboAdapter adapter = (HomeDianboAdapter) arg0.getAdapter();
  7.             adapter.notifyDataSetChanged(arg2);
  8.         }
  9.         @Override
  10.         public void onNothingSelected(AdapterView<?> arg0) {
  11.             // TODO Auto-generated method stub
  12.         }
  13.     };

//在Adapter中获取选择的item进行放大设置和UI更新

  1. private int selected = -1;
  2.     public void notifyDataSetChanged(int id) {
  3.         selected = id;
  4.         super.notifyDataSetChanged();
  5.     }

//放大就简单了,我这里直接用(当然可以使用setPadding()等其他方法都可以)

  1. if(selected ==position)
  2. holder.itemImg.setScaleType(ScaleType.FIT_XY);
  3. else
  4. holder.itemImg.setScaleType(ScaleType.CENTER_INSIDE);

到这里第一个问题已经基本解决,那么第二个问题就尴尬了,我也是实在没有办法中的办法,只能给页面上能获取到焦点的控件都设置了监听,当某个GridView获取焦点时,就对上一个有放大item的GridView进行重新更新UI,如果各位大神有什么好的办法还希望多多指教,小菜虽然入行两三年,第一篇博客还是选择从基础入手;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉念聿辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值