중에있는 ScrollView의 스크롤 위치 관리 :I는 다음과 같이 구현된다 책장이 방향 변경
I 갖고 동적으로 생성 TableRows 대한 컨테이너의 역할을 중첩 TableLayout을 포함을있는 ScrollView.
<com.test.bookshelf.CustomScrollView
android:id="@+id/scrollview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/newHeader"
android:overScrollMode="never"
android:fadingEdge="none" >
<TableLayout
android:id="@+id/tblLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0dp" >
</TableLayout>
</com.test.bookshelf.CustomScrollView>
있는 ScrollView 지정 번호 :
public class CustomScrollView extends ScrollView {
private boolean enableScrolling = true;
private ScrollViewListener scrollViewListener = null;
public interface OnEndScrollListener {
public void onEndScroll();
}
private OnEndScrollListener mOnEndScrollListener;
public boolean isEnableScrolling() {
return enableScrolling;
}
public void setEnableScrolling(boolean enableScrolling) {
this.enableScrolling = enableScrolling;
}
public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomScrollView(Context context) {
super(context);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (isEnableScrolling()) {
return super.onInterceptTouchEvent(ev);
} else {
return false;
}
}
public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if(scrollViewListener != null) {
scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
}
}
public OnEndScrollListener getOnEndScrollListener() {
return mOnEndScrollListener;
}
public void setOnEndScrollListener(OnEndScrollListener mOnEndScrollListener) {
this.mOnEndScrollListener = mOnEndScrollListener;
}
}
각 테이블 행 동적 서의 총 개수에 기초하여 계산된다 열 고정 된 수의 구성. 방향 변경시이 전체 레이아웃이 다시 만들어집니다.
책꽂이를 생성 할 때 총 행 수가 정적 변수에 저장됩니다.
사용자가 책을 클릭하면 세부 정보 페이지로 이동합니다. 내가 클릭 이벤트 기간 동안 현재의 스크롤 위치를 저장하고 :
public static currentScrollPosition = 0;
imageviewobj.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
currentScrollPosition = scrollviewObj.getScrollY();
....
이 화면에 사용자가 반환 I이 값을 사용하여 스크롤 위치를 복원
.scrollviewObj.post(new Runnable() {
@Override
public void run() {
scrollviewObj.scrollTo(0, currentScrollPosition);
}
});
하지만 어떻게 방향 변경시 해당 스크롤 위치을 계산합니까? 세로 모드에서 책의 세로 간격 띄우기 (스크롤 위치)는 가로 및 세로 열 수가 다르기 때문에 가로 모드와 다릅니다.
이 문제에 대한 의견이 있으십니까?
고마워요! 약간의 코드 스 니펫이 도움이 될 것입니다 – Sourav
"보이는"행의 인덱스를 얻는 방법. ListView에는 getFirstVisiblePosition() 메서드가 있습니다. ScrollView에 비슷한 기능이 있습니까? – Sourav
getScrollY를 사용할 수 있습니다. http://stackoverflow.com/q/3327087/693752 – Snicolas