1

私は配列を持つviewPageに3つの画像があり、そのうちの1つをズームするときにviewPagerをロックしたいのですが、右側にスクロールすると次の写真が表示されます! ここに私のコードがあります

enter code here
 public class ExploreImageAdapter  extends PagerAdapter {
Context context;
boolean touchEvent;
private int[] exploreImages = new int[] {
    R.drawable.carfourele,
    R.drawable.carfourele2,
    R.drawable.carfourele3,
    R.drawable.carfourele4
};

private LayoutInflater inflater;
ExploreImageAdapter(Context context){
    this.context=context;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    for (int i=1 ; i<=exploreImages.length ; i++){

} }

@Override
public int getCount() {
  return exploreImages.length;
}

@Override
public boolean isViewFromObject(View view, Object object) {
  return view == ((View) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
               View topImageLayout = inflater.inflate(R.layout.item_pager_images, container, false);
          int padding = context.getResources().getDimensionPixelSize(R.dimen.padding_medium);
        TouchImageView  imageView= (TouchImageView)topImageLayout.findViewById(R.id.image);
        imageView.setFocusable(true);
                imageView.setPadding(padding, padding, padding, padding);
          imageView.setImageResource(exploreImages[position]);
          imageView.setMaxZoom(4f);
          ((ViewPager) container).addView(topImageLayout, 0);
              return topImageLayout;

}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
  ((ViewPager) container).removeView((View) object);
}

}

4

1 に答える 1

2

これを行う最善の方法は、カスタム ViewPager を作成し、メソッドonTouchEvent()onTouchInterceptEvent()メソッドをオーバーライドすることです。例えば、

public class LockedViewPager extends ViewPager {
    private boolean pagingEnabled;

    public LockedViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        pagingEnabled = true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (pagingEnabled) {
           return super.onTouchEvent(event);
        }
        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        if (pagingEnabled) {
           return super.onTouchEvent(event);
        }
        return false;
    }

    /**
     * @param pagingEnabled
     *      if true, ViewPager acts as normal
     *      if false, ViewPager cannot be scrolled by a user's touch
     */
    public void setPagingEnabled(boolean pagingEnabled) {
        this.pagingEnabled = pagingEnabled;
    }
}

ユーザーがスクロールできないようにしたいときはいつでも、単に呼び出すだけlockedViewPager.setPagingEnabled(false);
です。lockedViewPager.setPagingEnabled(true);

簡単に説明すると、onTouchEvent メソッドは通常、ページング動作を処理するためのエントリ ポイントであるため、ページングが有効になっていない場合は常に最初から停止しています。また、メソッドは通常、イベントを処理した場合は true を返すため、イベントを無視したことを示すために false を返す必要があります。

your_appこれをアプリに組み込むには、最初に LockedViewPager をアクティビティの XML に追加しますが、LockedViewPager クラスの名前とパスを作成することを忘れないでyour_packageください (Android Studio を使用している場合は、最初に LockedViewPager と入力する必要があります)。パスを自動的に認識して提案します):

<com.your_app.your_package.LockedViewPager
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/lockedViewPager"/>

次に、これをアクティビティで次のように使用します。

public class MyActivity {

    private LockedViewPager lockedViewPager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // other activity setup, etc.

        lockedViewPager = (LockedViewPager) findViewById(R.id.lockedViewPager);

        // set up pager, set its adapter and any listeners, etc.

    }

    /*
     * Call this method once you've zoomed, for example
     */
    public void onZoom() {
        lockedViewPager.setPagingEnabled(false);
    }

    /*
     * Don't forget to call this method at some time later to re-enable the paging
     */
    public void resumePaging() {
        lockedViewPager.setPagingEnabled(true);
    }
}
于 2013-08-27T03:50:49.043 に答える