현재, HorizontalScrollView를 기준으로 만들었는데, 그냥 ScrollView도 다음과 같이 하시면 바로 적용가능하시겠네요.
스크롤뷰의 위치가 어디에 위치했는가를 알려줍니다.
상태는 세가지가 있습니다.
public static enum DIRECTION { LEFT, RIGHT, NONE }
스크롤이 움직이게 되면, 커스텀 위젯의, OnEdgeTouchListener 가 호출되고, 여기서 스크롤 위치를 계산하여
콜백을 날려주게 됩니다.
이때, 위의 DIRECTION상태에 따라서, 원하시는 액션을 취해주시면 됩니다.
만든 방법은, 스크롤 될때마다 computeScroll을 호출하기 때문에, 이때마다 위치를 계산하여, 인터페이스를 등록한후 콜백을 날려주는 겁니다.
사용방법은 커스텀뷰 생성후에, 생성된 커스텀 뷰에 setOnEdgeTouchListener를 등록하여 사용하면 됩니다.
CustomHorizontalView.java
import android.content.Context;
import android.graphics.Path.Direction;
import android.util.AttributeSet;
import android.widget.HorizontalScrollView;
/**
* 스크롤뷰가 가장자리에 다다랐는지 확인하기 위해 사용하는 커스텀 ScrollView
* @author 이현정(g.littlepanda@gmail.com)
*/
public class CustomHorizontalScrollView extends HorizontalScrollView {
protected OnEdgeTouchListener onEdgeTouchListener;
public static enum DIRECTION { LEFT, RIGHT, NONE };
public CustomHorizontalScrollView(Context context) {
super(context);
}
public CustomHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomHorizontalScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
public void setOnEdgeTouchListener(OnEdgeTouchListener l){
this.onEdgeTouchListener = l;
}
@Override
public void computeScroll() {
super.computeScroll();
if(onEdgeTouchListener != null){
if(getScrollX()==0){
onEdgeTouchListener.onEdgeTouch(DIRECTION.LEFT);
} else if((getScrollX() + getWidth())==computeHorizontalScrollRange()){
onEdgeTouchListener.onEdgeTouch(DIRECTION.RIGHT);
} else {
onEdgeTouchListener.onEdgeTouch(DIRECTION.NONE);
}
}
}
public interface OnEdgeTouchListener {
void onEdgeTouch(DIRECTION direction);
}
}
요런식으로 사용.
사용방법.java
listScrollView.setOnEdgeTouchListener(new CustomHorizontalScrollView.OnEdgeTouchListener() {
@Override
public void onEdgeTouch(DIRECTION direction) {
if(direction==DIRECTION.LEFT){
if(leftDirectionImg.getVisibility()==View.VISIBLE){
leftDirectionImg.setVisibility(View.INVISIBLE);
}
} else if(direction==DIRECTION.RIGHT){
if(rightDirectionImg.getVisibility()==View.VISIBLE){
rightDirectionImg.setVisibility(View.INVISIBLE);
}
} else if(direction==DIRECTION.NONE){
if(leftDirectionImg.getVisibility() != View.INVISIBLE){
leftDirectionImg.setVisibility(View.VISIBLE);
}
if(rightDirectionImg.getVisibility() != View.INVISIBLE){
rightDirectionImg.setVisibility(View.VISIBLE);
}
} else {
throw new IllegalArgumentException("Invalid direction. please check direction.!");
}
}
});
나름 열심히 만들었으니 불펌하지 말아주세요. 도움이 되셨다면 댓글 하나라도 남겨주시구요~
'Programming > android' 카테고리의 다른 글
color를 xml로 사용하기. (1) | 2011.06.24 |
---|---|
나인패치 (3) | 2011.06.24 |
외부 라이브러리 사용하기 (0) | 2011.06.16 |
안드로이드 개발환경 구축하기 (0) | 2011.06.07 |
가로모드에서 editText 키보드가 화면을 덮을때 ! (1) | 2011.05.25 |