2017-01-28 2 views
0

Я создаю приложение, которое должно отображать полнофункциональные масштабируемые изображения, например, в встроенном приложении для андроид-приложений. Я попробовал некоторые библиотеки, но никто из них не выполнил эту работу, как я и предсказывал. Некоторые из них не предоставляют полноцветные растровые изображения.Как приложение фотогалереи Android просматривает изображения?

Другие библиотеки, такие как BitmapRegionDecoder, работают хорошо, но не могут декодировать некоторые типы изображений (CMYK, шкала серого).

Я не знаю, как большинство приложений для фотогалереи показывают все изображения отлично?

+1

Что именно вы хотите знать? Вопрос слишком широк. Загрузка, кеширование и рендеринг изображений - довольно сложные и сложные процессы. Нет единой библиотеки, которая бы прекрасно справлялась со всеми делами. – eleven

+0

«Я попробовал несколько библиотек» - это помогло бы, если бы вы их назвали. У меня не было никаких проблем [с помощью 'SubsamplingScaleImageView'] (https://github.com/davemorrissey/subsampling-scale-image-view). Вы также можете посмотреть существующие приложения с открытыми исходными кодами. – CommonsWare

+0

Я пробовал SubsamplingScaleImageView, но не смог загрузить изображения CMYK & Gray Scale – 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 и Grayscale). – Ahmad

+0

Хорошо ... Я попытаюсь найти другое решение. –

Смежные вопросы