2017-10-18 16 views
1

現在、私は活動の先頭に背景画像を設定しようとしています。画像の 仕様:背景画像slow app down

高さ:290dp 幅:match_parent ScaleType:cropCenter

背景画像が@drawablesに格納されています。画像のサイズは750 x 600ピクセルです。 サイズは41,3 KBです。

私の活動のXMLは次のようになります。

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#E6E6E6"> 

<ImageView 
    android:layout_height="290dp" 
    android:layout_width="match_parent" 
    android:scaleType="centerCrop" 
    android:src="@drawable/background_rocket"> 

</ImageView> 

<ListView 
    android:id="@+id/list" 
    android:paddingTop="240dp" 
    android:clipToPadding="false" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbarStyle="outsideOverlay" 
    android:divider="@android:color/transparent" 
    android:listSelector="@android:color/transparent" 
    android:descendantFocusability="blocksDescendants"> 

</ListView> 

</RelativeLayout> 

実行中のアプリケーションの結果: 私が欲しいまさにだが、それが遅い恐ろしいですenter image description here

は(私はそれを実行しています私のS8)。私がスクロールしているとき、それは固まっています。 Androidスタジオエミュレータで実行していると、正常に動作します(実際の電話と同じように少し遅くなっていますが、これよりもはるかに優れています)。

私は既にプラグインをダウンロードしました:Drawable Importer。

enter image description here

しかし、それは助けにはなりませんでした。

注意:カスタムListView Adapterは、ImageViewを削除するとスムーズに実行されるため、問題はありません。

+0

'android:background ="#E6E6E6 "'を '' @ drawable/background_rocket "'に変更すると、違いはありますか? – pskink

+0

@pskinkいいえ、まだ同じです。しかし、ありがとう。 – MyNewName

+0

@pskinkはい、私はカスタム 'Adapater'を使用しています。 'GetView'メソッドの内容です:' if(convertView == null) convertView = mContext.getLayoutInflater()。inflate(R.layout.list_item_person、null); return convertView; ' – MyNewName

答えて

1

ImageViewListViewのヘッダーとして追加します。

これを試してください。

ListView listView = (ListView) findViewById(R.id.your_listview); 
View headerView = LayoutInflater.from(this).inflate(R.layout.your_image,null); 
listView.addHeaderView(headerView); 
+0

答えをありがとう。私はそれを試しました。今何か違うことがあります。私はイメージを見ると、それはストッキングですが、イメージがスクロールアウトされると、それは動作します。 – MyNewName

+0

画像の読み込みに時間がかかります – KeLiuyue

0

PicassoUniversal Image Loaderのような任意の画像ローダーで画像をロードしてみたり、他の画像の読み込みライブラリ

1

750x600解像度で、あなたのイメージがdrawable-xxxhdpiフォルダにある場合は、イメージがあなたのサムスンS8に縮小されます。あなたのデバイスは1440x2960ピクセルの解像度を持っているからです。

スケーリング処理は、自然に作成時間プロセスが増加し、また、メモリの約5メガバイト、ない45キロバイトを消費します。

大きい画像に拡大縮小すると、一部の大きな画面デバイスでメモリの問題(OOM例外など)が発生します。

また、ListViewアイテムの画像もスケーリングされます。このスケーリング処理は、遅いスクロールの問題の原因となる可能性があります。

注:パフォーマンスと柔軟性を高めるために、常にRecyclerViewを使用してください。 画像を読み込むには、より良い性能とより良いキャッシングメカニズムのために、GlideまたはPicassoライブラリを使用できます。