2017-09-25 12 views
1

저는 Android app 개발에 새로운 것이므로 ImageGallery 앱을 만들었습니다. 갤러리에서 이미지 집기 및 확대/축소를 구현하려고합니다. https://github.com/chrisbanes/PhotoView을 사용하여 확대/축소 및 핀치를 구현했습니다. 이제 문제는 뷰 호출기에서 제대로 작동하지 않는 것입니다. 코드에서 photoView.setVisibility(View.GONE);을 제거하면 이미지를 확대 할 수 있지만 뷰 페이지가 작동을 멈추고 이미지를 스 와이프 할 수 없습니다. photoView.setVisibility(View.GONE);을 다시 추가하면 이미지를 스 와이프 할 수는 있지만 확대 할 수는 없습니다. 이 문제를 어떻게 해결할 수 있습니까?핀치 확대/축소 및 뷰 페이지가 동시에 작동하지 않습니다.

FullImageActivity.java :

public class FullImageActivity extends AppCompatActivity { 
    ImageView images; 
    int position; 
    int folderPosition; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_full_image); 
     Intent i = getIntent(); 
     PhotoView photoView = (PhotoView) findViewById(R.id.photo_view); 
     photoView.setVisibility(View.GONE); 

     // Selected image id 
     position = i.getExtras().getInt("id"); 
     folderPosition = i.getExtras().getInt("folderPosition"); 
     Bundle extras = getIntent().getExtras(); 
     String value = extras.getString("abc"); 

     Glide.with(FullImageActivity.this) 
       .load(value) 
       .skipMemoryCache(false) 
       .into(photoView); 

     ViewPager mViewPager = (ViewPager) findViewById(R.id.viewpager); 
     mViewPager.setAdapter(new TouchImageAdapter(this,al_images, folderPosition)); 
     mViewPager.setCurrentItem(position); 
    } 
} 

activity_full_image.xml :

<?xml version="1.0" encoding="utf-8"?> 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/jazzy_pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <com.github.chrisbanes.photoview.PhotoView 
     android:id="@+id/photo_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:scaleType="centerCrop"/> 


    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

TouchImageAdapter.java :

class TouchImageAdapter extends PagerAdapter { 
    Context context; 
    String filename; 
    ArrayList<Model_images> al_menu = new ArrayList<>(); 
    int position,int_position; 

    public TouchImageAdapter(Context context,ArrayList<Model_images> al_menu, int position){ 
     this.al_menu = al_menu; 
     this.context = context; 
     this.int_position = position; 
    } 

    @Override 
    public int getCount() { 
     return al_menu.get(int_position).getAl_imagepath().size(); 
    } 

    @Override 
    public View instantiateItem(ViewGroup container, int position) { 

     ImageView img = new ImageView(container.getContext()); 
     ViewGroup.LayoutParams lp= new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
     img.setLayoutParams(lp); 
     img.setImageDrawable(getImageFromSdCard(filename,position)); 
     container.addView(img, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 
     return img; 
    } 

    public int getItemPosition(Object object) { 
     return POSITION_NONE; 
    } 

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

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


    public Drawable getImageFromSdCard(String imageName,int position) { 
     Drawable d = null; 
     try { 
      String path = al_menu.get(int_position).getAl_imagepath().get(position) 
        + "/"; 
      Bitmap bitmap = BitmapFactory.decodeFile(path); 
      d = new BitmapDrawable(context.getResources(),bitmap); 
     } catch (IllegalArgumentException e) { 
      // TODO: handle exception 
     } 

     return d; 


    } 
} 

답변

0

이미지를 슬라이드하고 ViewPager을 사용하여 해당 이미지를 확대하려면 뷰 페이지에서 일부 사용자 정의 작업을 수행해야합니다. 다른 것들은 viewpager와 imageview의 터치를 유지해야만합니다. how you can create viewpager with zoom-in image?을 확인하십시오. 나는 그것이 당신을 위해 도움이되고 당신의 해결책을 얻을 것이기를 희망합니다.