change the method addIconFontDescriptor in Iconify.java to the following and used directly:
/**
* Add support for a new icon font.
*
* @param iconFontDescriptorArray The IconDescriptors holding the ttf file reference and their mappings.
*/
public static void addIconFontDescriptors(IconFontDescriptor... iconFontDescriptorArray) {
if (iconFontDescriptorArray != null && iconFontDescriptorArray.length > 0) {
for (IconFontDescriptor iconFontDescriptor : iconFontDescriptorArray) {
// Prevent duplicates
for (IconFontDescriptorWrapper wrapper : iconFontDescriptors) {
if (wrapper.getIconFontDescriptor().ttfFileName()
.equals(iconFontDescriptor.ttfFileName())) {
break;
}
}
// Add to the list
iconFontDescriptors.add(new IconFontDescriptorWrapper(iconFontDescriptor));
}
}
}
and using like this will be better, I delete the unnecessary class IconifyInitializer
now using like following which I think better:
Iconify.addIconFontDescriptors(
new FontAwesomeModule(),
new EntypoModule(),
new MaterialModule(),
new MaterialCommunityModule());
I also change another place in ParsingUtil to following, and I create the TypefaceSpanCache.java
This can prevent many duplicate new CustomTypefaceSpan instance, as I debug when I screen down the screen it will duplicatedly new CustomTypefaceSpan, It's better to store faceSpan in memery.
package com.joanzapata.iconify.internal;
import android.graphics.Typeface;
import com.joanzapata.iconify.Icon;
import java.util.HashMap;
/**
Created by zhangziwei on 1/7/16.
This class is used to store the same icon TypefaceSpanCache instance in memory,
otherwise the instance will be renew many times when we scroll the screen
*/
public class TypefaceSpanCache {
private static HashMap<String, CustomTypefaceSpan> faceSpans = new HashMap<String, CustomTypefaceSpan>();
public static CustomTypefaceSpan getFaceSpan(Icon icon, Typeface type,
float iconSizePx, float iconSizeRatio, int iconColor,
boolean rotate, boolean baselineAligned) {
change the method addIconFontDescriptor in Iconify.java to the following and used directly:
and using like this will be better, I delete the unnecessary class IconifyInitializer now using like following which I think better: Iconify.addIconFontDescriptors( new FontAwesomeModule(), new EntypoModule(), new MaterialModule(), new MaterialCommunityModule());
I also change another place in ParsingUtil to following, and I create the TypefaceSpanCache.java
text.setSpan(TypefaceSpanCache.getFaceSpan(icon, iconFontDescriptor.getTypeface(context), iconSizePx, iconSizeRatio, iconColor, spin, baselineAligned), startIndex, startIndex + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
This can prevent many duplicate new CustomTypefaceSpan instance, as I debug when I screen down the screen it will duplicatedly new CustomTypefaceSpan, It's better to store faceSpan in memery.
package com.joanzapata.iconify.internal;
import android.graphics.Typeface;
import com.joanzapata.iconify.Icon;
import java.util.HashMap;
/**
otherwise the instance will be renew many times when we scroll the screen */ public class TypefaceSpanCache {
private static HashMap<String, CustomTypefaceSpan> faceSpans = new HashMap<String, CustomTypefaceSpan>();
public static CustomTypefaceSpan getFaceSpan(Icon icon, Typeface type, float iconSizePx, float iconSizeRatio, int iconColor, boolean rotate, boolean baselineAligned) {
} }