【问题标题】:How does Android's photo gallery app views Images?Android 的照片库应用如何查看图像?
【发布时间】:2017-01-28 16:18:48
【问题描述】:

我正在制作一个应用程序,该应用程序应该显示全质量的可缩放图像,例如内置的 android 画廊应用程序。我尝试了一些库,但没有一个像我预期的那样完成工作。其中一些不提供完整质量的位图。

使用BitmapRegionDecoder 的其他库运行良好,但无法解码某些图像类型(CMYK、灰度)。

我不知道大多数照片库应用程序如何完美地显示所有图像?

【问题讨论】:

  • 您到底想知道什么?这个问题太宽泛了。加载、缓存和渲染图像是相当棘手和复杂的过程。没有一个库可以完美地处理所有情况。
  • “我已经尝试了一些库”——如果你命名它们会有所帮助。我没有遇到任何问题with SubsamplingScaleImageView。您还可以查看现有的开源图库应用。
  • 我尝试过 SubsamplingScaleImageView 但无法加载 CMYK 和灰度图像
  • 我需要你的建议,我应该用什么来制作一个高质量的可缩放图像浏览器。
  • 欢迎来到堆栈溢出 :-) 请查看How to Ask 以及如何创建minimal reproducible example。这将有助于获得有用的答案。

标签: java android image


【解决方案1】:

使用此代码:

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);
}
}

【讨论】:

  • 谢谢,但我正在寻找一种方法来处理像在 SubsamplingScaleImageView 中加载的图像文件(但它无法加载 CMYK 和灰度图像)。
  • 好的...我会尝试找出其他解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多