小菜之前一直接触的大都都是手机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即可
- ViewGroup.LayoutParams params = typeGridView .getLayoutParams();
- params.width = 209 * dianboBigTypeInfo.dianboType.size();
- typeGridView.setLayoutParams(params);
- typeGridView.setNumColumns(dianboBigTypeInfo.dianboType .size())
//实现焦点来进行滑动,给HorizontalScrollView设置smoothScrollTo()
- OnItemSelectedListener dianboTypeItemListener = new OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
- long arg3) {
- buttomScrollView.smoothScrollTo(arg2 * 210, 0);
- }
- @Override
- public void onNothingSelected(AdapterView<?> arg0) {
- // TODO Auto-generated method stub
- }
- };
/**放大效果又如何实现呢,同样,懒人有懒人的办法,直接在GridView设置OnItemSelectedListener进行的item选中监听,利用notifyDataSetChanged()进行页面刷新即可*/
- OnItemSelectedListener dianboTypeItemListener = new OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
- long arg3) {
- buttomScrollView.smoothScrollTo(arg2 * 210, 0);
- HomeDianboAdapter adapter = (HomeDianboAdapter) arg0.getAdapter();
- adapter.notifyDataSetChanged(arg2);
- }
- @Override
- public void onNothingSelected(AdapterView<?> arg0) {
- // TODO Auto-generated method stub
- }
- };
//在Adapter中获取选择的item进行放大设置和UI更新
- private int selected = -1;
- public void notifyDataSetChanged(int id) {
- selected = id;
- super.notifyDataSetChanged();
- }
//放大就简单了,我这里直接用(当然可以使用setPadding()等其他方法都可以)
- if(selected ==position)
- holder.itemImg.setScaleType(ScaleType.FIT_XY);
- else
- holder.itemImg.setScaleType(ScaleType.CENTER_INSIDE);
到这里第一个问题已经基本解决,那么第二个问题就尴尬了,我也是实在没有办法中的办法,只能给页面上能获取到焦点的控件都设置了监听,当某个GridView获取焦点时,就对上一个有放大item的GridView进行重新更新UI,如果各位大神有什么好的办法还希望多多指教,小菜虽然入行两三年,第一篇博客还是选择从基础入手;