「Android学習」ListScrollView、ScrollViewの使い方を利用するサンプルコード
Javaコード:
public class ListScrollView extends ScrollView {
private List list = new ArrayList();
private int scrollPaddingTop;
private int scrollPaddingLeft;
private int[] scrollLoaction = new int[2];
private final static int UPGLIDE = 0;
private final static int DOWNGLIDE = 1;
private int glideState;
public ListScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
private int downY = 0;
private int moveY = 0;
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
downY = (int) ev.getY();
//System.out.println(“actiondown" + ev.getY());
break;
case MotionEvent.ACTION_MOVE:
moveY= (int) ev.getY();
//System.out.println(“move" + moveY + “down" + downY);
if((moveY – downY) >= 0) {
//System.out.println(“""""’DOWNGLIDE"""""'");
glideState = DOWNGLIDE;
} else {
glideState = UPGLIDE;
}
break;
case MotionEvent.ACTION_UP:
default:
break;
}
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int x = (int) ev.getX() + scrollLoaction[0];
int y = (int) ev.getY() + scrollLoaction[1];
for (int i = 0; i < list.size(); i++) {
ListView listView = list.get(i);
int[] location = new int[2];
listView.getLocationInWindow(location);
int width = listView.getWidth();
int height = listView.getHeight();
if (x >= location[0] + scrollPaddingLeft
&& x <= location[0] + scrollPaddingLeft + width
&& y >= location[1] + scrollPaddingTop
&& y <= location[1] + scrollPaddingTop + height) {
//System.out.println(glideState);
if(( (listView.getLastVisiblePosition() == (listView.getCount()-1)) && (glideState == UPGLIDE) ) ) {
//System.out.println(“up");
break;
}
if(( (listView.getFirstVisiblePosition() == 0) && (glideState == DOWNGLIDE))) {
//System.out.println(“down");
break;
}
return false;
}
}
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return super.onTouchEvent(ev);
}
private void findAllListView(View view) {
if (view instanceof ViewGroup) {
int count = ((ViewGroup) view).getChildCount();
for (int i = 0; i < count; i++) {
if (!(view instanceof ListView)) {
findAllListView(((ViewGroup) view).getChildAt(i));
}
}
if (view instanceof ListView) {
list.add((ListView) view);
}
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
scrollPaddingTop = getTop();
scrollPaddingLeft = getLeft();
getLocationInWindow(scrollLoaction);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (this.getChildCount() != 1) {
try {
throw new ScrollException();
} catch (ScrollException e) {
e.printStackTrace();
}
}
list.clear();
findAllListView(this.getChildAt(0));
}
}