4

アンドロイド アイス クリーム サンドイッチを実行しているアプリケーションは、roto.ttf および roboto-bold.ttf フォントを fonts フォルダーにインポートした後、これらのフォントで 4 つのテキストビューを設定した後、リストビューのスクロール中に非常に (非常に) 遅くなります。パフォーマンスを最適化する方法を知っている人はいますか? 速度を改善するためのヒントやコツはありますか?

これらのコード行を挿入する前は、非常にスムーズだったことを明確にします。

Typeface roboto = Typeface.createFromAsset(activity.getAssets(), "fonts/Roboto-Regular.ttf");
    Typeface robotobold = Typeface.createFromAsset(activity.getAssets(), "fonts/Roboto-Bold.ttf");
    nome.setTypeface(robotobold);
    mq.setTypeface(roboto);
    citta.setTypeface(roboto);
    prezzo.setTypeface(roboto);
    descrizione.setTypeface(roboto);

フォント キャッシュに役立つクラスを追加します。

public class TypefaceCache {
  private final HashMap<String, Typeface> map;
  private Context con;
  public TypefaceCache(Context con) {
              map = new HashMap<String, Typeface>();
              this.con = con;
  }


  public Typeface getTypeface(String file) {
    Typeface result = map.get(file);
    if (result == null) {
      result = Typeface.createFromAsset(con.getAssets(), file);
      map.put(file, result);
    }
    return result;
  }
}

クラスとフォントを呼び出します

    TypefaceCache typecache = new TypefaceCache(activity);
    Typeface roboto = typecache.getTypeface("fonts/Roboto-Regular.ttf");

しかし、結果は同じです...

4

3 に答える 3

4

をキャッシュしてみてくださいTypeface

public class TypefaceCache {
  private final HashMap<String, Typeface> map =
      new HashMap<String, Typeface>();

  private Typeface getTypeface(String file, Context context) {
    Typeface result = map.get(file);
    if (result == null) {
      result = Typeface.createFromAsset(context.getAssets(), file);
      map.put(file, result);
    }
    return result;
  }
}
于 2012-06-28T02:55:54.953 に答える
1

少し前にこの問題がありました。解決策は、このブログで説明されているように、クラスを静的に設定することでした。

public class TypefaceSingleton {  
    private static TypefaceSingleton instance = new TypefaceSingleton();  
    private TypefaceSingleton() {}  

    public static TypefaceSingleton getInstance() { 
        return instance; 
    }  
    public Typeface getTypeface() { 
        return Typeface.createFromAsset(ThinkNearApp.getContext().getResources().getAssets(), "fonts/Roboto-Bold.ttf"); 
    } 
}
于 2012-06-28T11:18:14.870 に答える
0

これが私の解決策です:UIを起動するasynctaskで、クラス変数を挿入します

private final HashMap<String, Typeface> map;

そして、クラスコンストラクターを介して初期化します

map = new HashMap<String, Typeface>();

クラスに書体をロードするメソッドを実装します。

private Typeface getTypeface(String file, Context context) {
    Typeface result = map.get(file);
    if (result == null) {
      result = Typeface.createFromAsset(context.getAssets(), file);
      map.put(file, result);
    }
    return result;
}

次に、非同期タスクで必要なときに、テキストビューにロードしたお気に入りの書体を追加すると、すべてが非常にスムーズになります。皆さんありがとうございます

于 2012-06-28T11:33:06.600 に答える