2017-01-28 129 views
0

我正在製作一個應該顯示完整質量的可縮放圖像的應用程序,比如在Android圖庫應用程序中內置的應用程序。我嘗試過一些圖書館,但他們都沒有像我預測的那樣完成這項工作。其中一些不提供完整質量的位圖。Android的照片庫應用程序如何查看圖像?

其他像這樣的庫使用BitmapRegionDecoder運行良好,但未能解碼某些圖像類型(CMYK,灰度)。

我不知道大多數照片庫應用程序如何完美顯示所有圖像?

+1

正是你想知道些什麼?這個問題太廣泛了。加載,緩存和渲染圖像是非常複雜和複雜的過程。沒有一個圖書館可以完美地處理所有案件。 – eleven

+0

「我試過了一些圖書館」 - 如果你給他們起名,這會有所幫助。 [SubsamplingScaleImageView'](https://github.com/davemorrissey/subsampling-scale-image-view)我沒有任何問題。您也可以查看現有的開源圖庫應用程序。 – CommonsWare

+0

我已經嘗試SubsamplingScaleImageView,但未能加載CMYK和灰度圖像 – Ahmad

回答

0

使用此代碼:

NAVViewPagerAdapter.java

public ViewPagerAdapter(Context aContext, int[] aImages) { 
this.myContext = aContext; 
myImages = aImages; 
myInflater = LayoutInflater.from(aContext); 
} 

@Override 
public void destroyItem(ViewGroup aContainer, int aPosition, Object aObject) { 
aContainer.removeView((View)aObject); 
} 

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

/** 
* @param view 
* @param position 
* @return 
*/ 
@Override 
public Object instantiateItem(ViewGroup view, int position) { 


View aView = myInflater.inflate(R.layout.layout_inflate_fullscreen_activity, view, false); 

final ImageView aImageView = (ImageView)aView 
     .findViewById(R.id.fullscreen_activity_IMG); 

aImageView.setImageResource(myImages[position]); 

view.addView(aView, 0); 

return aView; 
} 

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

@Override 
public void restoreState(Parcelable state, ClassLoader loader) { 
} 

@Override 
public Parcelable saveState() { 
return null; 
} 
} 

NAVFullScreenFragment.java

public class NAVFullScreenFragment extends Fragment { 

private ViewPager myViewPager; 
private int[] myImagesArray = NAVGridViewAdapter.myImages; 
private FragmentActivity myActivity; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater aInflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
View aView = aInflater.inflate(R.layout.screen_fragment_viewpager, container, false); 
viewPagerAndWidgetInitialize(aView); 
return aView; 
} 

/** 
* ViewPager & Widget Initialization 
* 
* @param aView 
*/ 
private void viewPagerAndWidgetInitialize(View aView) { 

myActivity = getActivity(); 
myViewPager = (ViewPager)aView.findViewById(R.id.screen_fragment_viewpager_pager); 
CircleIndicator aIndicator = (CircleIndicator)aView.findViewById(R.id.indicator); 

Bundle aBundle = getArguments(); 
myViewPager.setAdapter(new NAVViewPagerAdapter(myActivity, myImagesArray)); 

if(aBundle != null) { 

    int aPosition = aBundle.getInt("id"); 

    // Set the images into ViewPager 
    NAVViewPagerAdapter aPageradapter = new NAVViewPagerAdapter(myActivity, myImagesArray); 
    myViewPager.setAdapter(aPageradapter); 
    aIndicator.setViewPager(myViewPager); 
    // Show images following the position 
    myViewPager.setCurrentItem(aPosition); 
} 
} 
+0

謝謝,但我正在尋找一種處理圖像文件加載像SubsamplingScaleImageView(但加載CMYK和灰度圖像失敗)的方式。 – Ahmad

+0

好吧...我會嘗試找出其他解決方案。 –

相關問題