2016-09-03 4 views
0

リサイクラビューでは10のビュータイプがすべて1回のみ表示されます。それをスクロールしている間に遅れてスムーズにスクロールしません。リサイクルビューのスクロールパフォーマンスは、各行ごとに異なるビュータイプでスローダウンします

@Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = null; 
     switch (viewType) { 

      case DashboardCard.TYPE1: 
       view = LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.task_checklist_dashboard_item, parent, false); 
       return new TaskCheckListHolder(view); 
      case DashboardCard.TYPE2: 
       view = LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.g_dashboard_item, parent, false); 
       return new GItemViewHolder(view); 
      case DashboardCard.TYPE3: 
       view = LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.w_dashboard_item, parent, false); 
       return new WItemViewHolder(view); 
      case DashboardCard.TYPE4: 
       view = LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.p_dashboard_item, parent, false); 
       return new PItemHolder(view); 
      case DashboardCard.TYPE5: 
       view = LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.f_item, parent, false); 
       return new FtemHolder(view); 
      case DashboardCard.TYPE6: 
       view = LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.other_dashboard_items, parent, false); 
       return new OtherItemHolder(view); 
      case DashboardCard.TYPE7: 
        view = LayoutInflater.from(parent.getContext()) 
          .inflate(R.layout.pn_dashboard_item, parent, false); 
        return new MItemViewHolder(view); 
      case DashboardCard.TYPE8: 
       view = LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.mn_card, parent, false); 
       return new MNotificationItemViewHolder(view); 
      case DashboardCard.TYPE9: 
       view = LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.walkmeter_view, parent, false); 
       return new PrViewHolder(view); 
      case DashboardCard.TYPE10: 
       view = LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.other_notification_card, parent, false); 
       return new OtherItemViewHolder(view); 

     } 
     return null; 
    } 

各ビュー)は、棒グラフやonDraw(上のキャンバスのメソッドを使用して描かれている他のいくつかのグラフを持っていたカスタムビューを持つリサイクルビューの

実装は罰金であり、すべての物事がレンダリングされますが、スクロールパフォーマンスは非常に悪いです。

+1

はあなたのコードの関連部分を投稿してもらえますか? – iRuth

+1

@iRuthで合意...応答を改善するために、あなたはあなたの質問から、[最小で完全で検証可能な例](http://stackoverflow.com/help/mcve)、[構文の強調表示](http://meta.stackexchange.com/質問/ 184108/what-is-syntax-highlighting-and-how-does-it-work)、タイトルに[必要なタグを追加する](http://stackoverflow.com/help/tagging)の質問を明確にしてください。 ..と[FAQに進む](http://stackoverflow.com/help/how-to-ask)詳細については – user919426

+0

質問にコードを追加しました –

答えて

0

詳細情報がなくても、コードの遅い部分がどこにあるかを知ることは困難です。しかし、潜在的に集中的な描画操作を行っているという事実に基づいて、バックグラウンドスレッドでBitmapを描画すると恩恵を受ける可能性があります。これを実現する1つの方法は、その後onBindViewHolder()に、各レイアウトにImageViewを置くことです:

  1. クリアそれが既に持っている可能性のある既存のイメージのImageView
  2. イメージを描画するために背景スレッド(例:AsyncTask)を開始します。
  3. 背景描画がEX(完了です。AsyncTaskonPostExecute()ImageViewにビットマップをロードします。
関連する問題