1

Android 개발자 문서의 BitMapFun 자습서를 따르고 있습니다. 필자는 Android/Java 프로그래밍에 대한 전반적인 새로운 경험이 있습니다.FragmentActivity에서 FragmentActivity의 데이터에 액세스하여 스 와이프 방지용으로 사용하는 방법

나는 등, 사용자가 확대 할 수 있습니다 doubletap (TouchImageView전화) 사용자 정의 이미지 뷰어를 만들어 ... 그리고 ImageDetailFragment 클래스를 적용했습니다. TouchImageView 클래스에서

나는 사용자가 여부를 확대하는 경우 감지 할 수있는 부울 변수를 가지고 있고, 이미지가 국경 측에있는 경우 경우에 그것은 또한 플래그를합니다 zoomedIn입니다. (따라서 zoomedIn 비트와 화면 경계선)

이 논리를 적용하여 사용자가 다음/이전 페이지로 스크롤 할 수 있도록 ViewPager를 활성화하거나 비활성화합니다 (조각 읽기).이 ViewPager는 내가 왼쪽 또는 오른쪽으로합니다 (의 상태에 확대) 대신 이미지를 이동 이동하면 내 코드와 FragmentActivity

를 구현 ImageDetailActivity는 지금, 그것은 왼쪽 스크롤 대신 다음 조각에 갈거나 권리. 먼저 위 또는 아래로 이동하지 않으면 이미지를 스크롤 할 수 있습니다.

뷰티어를 사용/사용 중지하기 위해 내 Activiy에 대해 확인할 수있는 프래그먼트에 부울이 있으면 스크롤을 작동하는 방식을 '제어'할 수 있다고 생각했습니다.

이 논리가 맞습니까? 그렇다면 어떻게 DetailActivity 클래스의 Fragment에서 부울을 가져올 수 있습니까? 인터페이스를 사용하여 시도한 적이 있지만 onCreate 동안 단편화의 초기화로 인해 항상 잘못된 답장이 다시 표시됩니다. 따라서 표시되는 단편에서 런타임 중에 부울을 검색 할 수있는 무언가가 필요합니다. 그러나 아래 코드는 작동하지 않습니다.

public void onCreate(Bundle savedInstanceState) { 
.... Do stuff like fetching images and caching etc .... 
mPager = (ScrollViewPager) findViewById(R.id.pager); 
mAdapter = new ImagePagerAdapter(getSupportFragmentManager(), imgs.getImagesLocal().length); 
mPager.setAdapter(mAdapter); 
    mPager.setPageMargin((int) getResources().getDimension(R.dimen.image_detail_pager_margin)); 
    mPager.setOffscreenPageLimit(2); 

    mPager.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      //v.mAdapter.mCurItem 
      ScrollViewPager scroll = (ScrollViewPager) v; 
      //Log.d(TAG, "-----------------Current pos is "+ scroll.getCurrentItem()); 
      ImageDetailFragment frag = (ImageDetailFragment) mAdapter.getItem(scroll.getCurrentItem()); 
      if(frag.isPageChangeable()) 
      { 
       Log.d(TAG, "-----------------Page is zoomed"); 
      }else 
      { 
       Log.d(TAG, "----------------------Page is not Zoomed"); 
      } 
      return false; 

     } 
    }); 
} 

내가 가진 조각 초기화입니다.

/** 
* The main adapter that backs the ViewPager. A subclass of FragmentStatePagerAdapter as there could be a large number of items in the ViewPager and we don't want to retain 
* them all in memory at once but create/destroy them on the fly. 
*/ 
private class ImagePagerAdapter extends FragmentStatePagerAdapter { 

    private final int mSize; 

    public ImagePagerAdapter(FragmentManager fm, int size) { 
     super(fm); 
     mSize = size; 
    } 

    @Override 
    public int getCount() { 
     return mSize; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return ImageDetailFragment.newInstance(imgs.getImagesLocal()[position], position, imgs.getImagesLocal().length); 
    } 
} 

당신은 전체 코드를 살펴하려는 경우 내가 발견이 stackoverflow post

답변

0

에있는 다음과 같은 정보를 사용하는 생각 슬쩍/날뛰는의 예방을 위해 할 수있는 download it here.

부분적인 해결책, whiiii!

나는 링크에서 언급 한대로 Disable ViewPager을 구현했습니다. 그런 다음 onClick 메서드에 다음을 추가합니다.

public void onClick(View v) { 

    TouchImageViewLocal ti = (TouchImageViewLocal) findViewById(R.id.imageView); 
    if(ti.isZoomed()){ 
     Log.d(TAG, "-----------------------------------------is zoomed in? " + ti.isZoomed()); 
     mPager.setPagingEnabled(false); 
    }else 
    { 
     Log.d(TAG, "-----------------------------------------is zoomed in? " + ti.isZoomed()); 
     mPager.setPagingEnabled(true); 
    } 

이렇게하면 화면을 확대/축소하여 스 와이프를 중지/시작할 수 있지만 여전히 가장자리 감지 기능을 찾아야합니다. :-)

관련 문제