2015-11-09 16 views
4

我從我的畫廊得到的所有圖像(圖片來自三星galaxy s5)
我可以查看來自Viewpager的圖像。
但是當我開始刷卡。它太慢了。
幾秒鐘後,應用程序崩潰,沒有logcat錯誤。ViewPager太慢時滑動(使用畢加索)

public class Paging extends PagerAdapter { 
     private ArrayList<String> IMAGES = new ArrayList<>(); 
     private Context context; 
     private LayoutInflater layoutInflater; 
     public Paging(Context context) { 
      this.context = context; 
     } 

     @Override 
     public int getCount() { 
      return MainActivity.IMAGES.size(); 
     } 

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

     @Override 
     public View instantiateItem(View container, int position) { 
      IMAGES = (ArrayList<String>) MainActivity.IMAGES.clone(); 



      layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View item_view = layoutInflater.inflate(R.layout.imagepager_layout, (ViewGroup) container, false); 
      ImageView imageView = (ImageView) item_view.findViewById(R.id.img); 


      Picasso.with(context) 
        .load(IMAGES.get(position)) 
        .placeholder(R.drawable.plusbtn) 
        .into(imageView); 

     ((ViewGroup) container).addView(item_view); 

      return item_view; 


     } 

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

我的viewPager添加適配器。

viewPager = (ViewPager)findViewById(R.id.view_pager); 
adap = new Paging(MainActivity.this); 
viewPager.setAdapter(adap); 

我個XML ..

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/img" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_gravity="center" 
     android:gravity="center" /> 
</LinearLayout> 

我的觀點尋呼機。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 

    android:orientation="vertical" 
    > 

    <android.support.v4.view.ViewPager 
     android:id="@+id/view_pager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"></android.support.v4.view.ViewPager> 
</LinearLayout> 
+0

您的圖片太大,所以應用程序會發生ANR。加載之前嘗試減小圖像大小。 –

+0

我如何減少圖像的大小,但會在我的手機畫廊查看相同? –

+0

谷歌有很多關於「縮小Android的圖像大小」的答案。下面是加載前縮放圖像的示例:http://stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap-object/823966#823966 –

回答

3

,這是最有可能通過加載過多的圖像的像素數據不是必要的(以適應您的視圖大小)造成的。如果您的圖像尺寸很大,默認情況下,Picasso會將圖像的全部大小加載到內存中,導致幀速率較慢以及OOM異常。

快速修復將使用Picasso.with().load().resize(width, height)。它將啓用Picasso將下采樣版本的圖像加載到內存中。在用戶界面上,您可以使用fitCenter比例類型爲您的ImageView

理解的概念更好,不過,我想在這個題目在這裏建議您閱讀更多關於谷歌的開發人員指南:Loading Large Bitmaps Efficiently

+0

試圖使用調整大小,但一些全屏的肖像圖片變得如此之小.. –

+0

嘗試添加此屬性到您的''在xml:'android:scaleType =「fitCenter」',這將放大您的調整大小的圖像到適合視圖大小。還可以考慮在調整大小時嘗試不同的目標寬度/高度。 – bosphere

-1

1. Picasso集模式RGB565,設置內存高速緩存和高速緩存光盤。

2.重複使用ViewPager

3. ViewPager setPageoffset(1);

4.try:

<application 
    android:largeHeap="true"/> 
+0

沒有工作。但是,謝謝.. –

+0

你嘗試了所有3? –

+0

是的,我做到了。但它不起作用 –