android-iconify
android-iconify copied to clipboard
Optimize the code
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
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;
/**
-
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) {
String key = icon.key() + type.hashCode() + iconSizePx + iconSizeRatio + iconColor + rotate + baselineAligned; CustomTypefaceSpan customTypefaceSpan = faceSpans.get(key); if (customTypefaceSpan == null) { customTypefaceSpan = new CustomTypefaceSpan(icon,type,iconSizePx, iconSizeRatio, iconColor, rotate, baselineAligned); faceSpans.put(key, customTypefaceSpan); } return customTypefaceSpan;
} }
feel free to contact me.