ScrollView를 활성화하고 버튼 클릭으로 비활성화하고 싶습니다.
Disable은 ScrollView가없는 경우와 같습니다. 활성화하면 ScrollView가 반환됩니다.
텍스트 이미지가있는 갤러리가 있고 버튼을 클릭하면 화면 방향이 변경되므로 가로 모드에서 텍스트가 더 커집니다. 그리고 이미지가 자체적으로 늘어나지 않고 텍스트를 읽을 수 없도록 ScrollView를 원합니다.
scrollview.Enabled=false / setVisibility(false)
아무것도 만들지 않습니다.
xml :
<ScrollView
android:id="@+id/QuranGalleryScrollView"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<Gallery android:id="@+id/Gallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="horizontal"></Gallery>
</ScrollView>
감사
Edit1 : 갤러리를 숨길 수도 있기 때문에 가시성 (사라짐)을 사용할 수 없습니다. 원하는 것은 ScrollView의 효과를 숨기는 것입니다. ScrollView가있을 때 Gallery의 이미지가 scrollabale이되고 화면에 맞지 않으므로 전체 이미지를 보려면 스크롤해야하므로 버튼 클릭으로 비활성화 / 활성화하고 싶지 않습니다.
나는 이것을 시도했다 :
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setOnTouchListener(null);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setHorizontalScrollBarEnabled(false);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setVerticalScrollBarEnabled(false);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setEnabled(false);
하지만 여전히 갤러리의 이미지는 스크롤이 가능하고 화면에 맞지 않습니다. 이에 대한 해결책은 무엇입니까?
답변
시작해야 할 몇 가지 사항 :
- ScrollView의 스크롤을 비활성화 할 수 없습니다. ScrollView로 확장하고 일부 조건이 일치 할 때
onTouchEvent
반환false
할 메서드를 재정의해야합니다 . - Gallery 구성 요소는 ScrollView에 있는지 여부에 관계없이 가로로 스크롤됩니다. ScrollView는 세로 스크롤 만 제공합니다 (가로 스크롤에는 HorizontalScrollView가 필요함).
- 이미지 자체 확장에 문제가 있다고 말하는 것 같습니다. 이것은 ScrollView와는 아무 관련이 없습니다. ImageView가
android:scaleType
속성 (XML) 또는setScaleType
메서드로 확장되는 방식을 변경할 수 있습니다. 예를 들어ScaleType.CENTER
이미지를 확장하지 않고 원래 크기로 중앙에
ScrollView
스크롤을 비활성화하려면 다음과 같이 수정할 수 있습니다.
class LockableScrollView extends ScrollView {
...
// true if we can scroll (not locked)
// false if we cannot scroll (locked)
private boolean mScrollable = true;
public void setScrollingEnabled(boolean enabled) {
mScrollable = enabled;
}
public boolean isScrollable() {
return mScrollable;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// if we can scroll pass the event to the superclass
return mScrollable && super.onTouchEvent(ev);
default:
return super.onTouchEvent(ev);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Don't do anything with intercepted touch events if
// we are not scrollable
return mScrollable && super.onInterceptTouchEvent(ev);
}
}
그런 다음
<com.mypackagename.LockableScrollView
android:id="@+id/QuranGalleryScrollView"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<Gallery android:id="@+id/Gallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="horizontal">
</Gallery>
</com.mypackagename.LockableScrollView>
당신의 XML 파일에서 (단지 ScrollView
당신의 특별한LockableScrollView
).
그런 다음 전화
((LockableScrollView)findViewById(R.id.QuranGalleryScrollView)).setScrollingEnabled(false);
보기 스크롤을 비활성화합니다.
원하는 결과를 얻기 위해 스크롤을 비활성화하는 것 이상의 문제가 있다고 생각합니다 (예 : 위의 코드를 사용하여 갤러리는 스크롤 할 수 있음). 세 가지 구성 요소 (갤러리, 갤러리)에 대해 더 많은 연구를 수행하는 것이 좋습니다. ScrollView, ImageView)를 사용하여 각각의 속성과 작동 방식을 확인합니다.
답변
나는 이렇게 갔다.
scrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return isBlockedScrollView;
}
});
답변
이 간단한 솔루션이 방금 설정되었습니다.
ScrollView.requestDisallowInterceptTouchEvent(true);
답변
ScrollView 비활성화
ScrollView sw = (ScrollView) findViewById(R.id.scrollView1);
sw.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
답변
시작하려면 첫 번째 댓글에 게시 된 코드를 사용했지만 다음과 같이 변경했습니다.
public class LockableScrollView extends ScrollView {
public LockableScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public LockableScrollView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public LockableScrollView(Context context)
{
super(context);
}
// true if we can scroll (not locked)
// false if we cannot scroll (locked)
private boolean mScrollable = true;
public void setScrollingEnabled(boolean enabled) {
mScrollable = enabled;
}
public boolean isScrollable() {
return mScrollable;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// if we can scroll pass the event to the superclass
if (mScrollable) return super.onTouchEvent(ev);
// only continue to handle the touch event if scrolling enabled
return mScrollable; // mScrollable is always false at this point
default:
return super.onTouchEvent(ev);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// if we can scroll pass the event to the superclass
if (mScrollable) return super.onInterceptTouchEvent(ev);
// only continue to handle the touch event if scrolling enabled
return mScrollable; // mScrollable is always false at this point
default:
return super.onInterceptTouchEvent(ev);
}
}
}
그런 다음 나는 이것을 이렇게 불렀다.
((LockableScrollView)findViewById(R.id.scrollV)).setScrollingEnabled(false);
내가 시도했기 때문에
((LockableScrollView)findViewById(R.id.scrollV)).setIsScrollable(false);
그러나 그것은 setIsScrollable 이 정의되지 않았다고 말했습니다.
이게 도움이 되길 바랍니다
답변
여기에 더 간단한 해결책이 있습니다. 터치로 스크롤을 건너 뛰려면 onTouch()
for를 재정의하고 ScrollView
OnTouchListener
false를 반환합니다. 프로그래밍 방식 스크롤은 여전히 작동하며 ScrollView
클래스 를 확장 할 필요가 없습니다 .
mScroller.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return isScrollable;
}
});
답변
답변에 대해 언급 할 포인트가 충분하지 않지만 mikec의 답변이 저에게 효과적이라고 말하고 싶었습니다.! isScrollable을 다음과 같이 반환하도록 변경해야했습니다.
mScroller.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return !isScrollable;
}
});