需要的效果为:屏幕上固定几行几列的单元格,当焦点移动到某一个item时有一个焦点框的动画效果,焦点针对是item中的imageView的大小,向上或者向下滑动时也需要动画效果。
遇到的问题是,当快速移动时,容易出现偏差。
代码结构
最主要的是三个类:
1.BaseGridView
package com.hm.gridviewtest;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
public class BaseGridView extends GridView {
OnItemSelectedListener mSelectedListener;
BaseGridView(Context context) {
this(context, null);
}
BaseGridView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
BaseGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setSelected(true);
setFocusable(true);
setClickable(true);
}
@Override
public void setOnItemSelectedListener(OnItemSelectedListener listener) {
mSelectedListener = listener;
}
OnItemSelectedListener getOnBaseItemSelectedListener() {
return mSelectedListener;
}
void setOnBaseItemSelectedListener(OnItemSelectedListener listener) {
super.setOnItemSelectedListener(listener);
}
}
这个类很简单,而且是同包访问权限,最主要的方法是setOnItemSelectedListener,getOnBaseItemSelectedListener,setOnBaseItemSelectedListener,当外部调用的setOnItemSelectedListener时其实没有真正的设置监听,监听主要供BaseGridViewContainer来处理滑动
2.BaseGridViewContainer
这个类是最关键的,处理滑动,控制BaseGridView的大小等等。
package com.hm.gridviewtest;
import android.co