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,如果各位大神有什么好的办法还希望多多指教,小菜虽然入行两三年,第一篇博客还是选择从基础入手;

猜你喜欢

转载自blog.csdn.net/qq_35350654/article/details/81162413