画像のスライドに使用しましたが、ズーム オプションを使用して画像を表示する必要があります。画像はズームされますが、画像のズーム中にViewPager
ページングが中断されます。onTouchEvent()
OnInterceptTouchEvent()
ViewPager
2125 次
4 に答える
2
サブクラスViewPager
化してオーバーライドしますcanScroll()
。タッチ イベントが検出されたウィジェットが渡されますtrue
。スクロール イベントをそのウィジェットに渡しfalse
たい場合、またはViewPager
にそのスクロール量を使用させたい場合は、戻ることができます。あなたの場合、ズームしているときに独自のカスタムロジックを採用し、ズームしていないときにスーパークラスにチェーンするだけです。
于 2013-09-16T11:59:08.290 に答える
1
私も同じ問題に一度直面していましたが、これを解決するために次のことを行いました。カスタム ViewPager クラスを使用しました。
CustomViewPager .java
public class CustomViewPager extends ViewPager {
private boolean isPagingEnabled;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.isPagingEnabled = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.isPagingEnabled) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.isPagingEnabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean b) {
this.isPagingEnabled = b;
}
}
スクロールを無効にするには、次のスニペットを使用します。
CustomViewPager pager = (CustomViewPager) findViewById(R.id.pager);
pager.setPagingEnabled(false);
さらに情報が必要な場合は、尋ねることができます。それが役に立てば幸い。
于 2013-09-16T12:05:53.010 に答える
0
私は次の方法でこれを行いました。ユーザーがズームするとページングが無効になりますが、ズームされたイメージビューの端に到達すると、次/前の画像に適切にページングされます。
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(handleTouch(ev)) {
return super.onTouchEvent(ev);
}
else {
return false;
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if(handleTouch(ev) && !areCommentsOpen()) {
return super.onInterceptTouchEvent(ev);
}
else {
return false;
}
}
private boolean handleTouch(MotionEvent ev) {
if (prevX != -666 && ev.getAction() == MotionEvent.ACTION_MOVE) {
if(ev.getX() <= prevX) {
isGoingLeft=false;
}
else {
isGoingLeft=true;
}
}
else if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) {
return true;
}
ZoomableImageView imageView = getImageView();
if(imageView == null) {
return true;
}
prevX=ev.getX();
if(imageView.getZoomLevel() <= 1f) {
return true;
}
else if(imageView.isBoundedLeft()) {
if(isTransitioning) {
return true;
}
else if (isGoingLeft) {
isTransitioning = true;
return true;
}
else {
return false;
}
}
else if (imageView.isBoundedRight()) {
if(isTransitioning) {
return true;
}
else if (!isGoingLeft) {
isTransitioning = true;
return true;
}
else {
return false;
}
}
else {
isTransitioning = false;
return false;
}
}
private ZoomableImageView getImageView() {
for (int i = 0; i < getChildCount(); i++) {
ZoomableImageView imageView = (ZoomableImageView) (getChildAt(i).findViewById(R.id.single_image_view));
if(imageView.getPosition() == getCurrentItem()) {
return imageView;
}
}
return null;
}
public void setTransitioning(boolean trans) {
this.isTransitioning = trans;
}
public void setGoingLeft(boolean left) {
this.isGoingLeft = left;
}
于 2013-09-16T12:06:40.157 に答える