android-iconify icon indicating copy to clipboard operation
android-iconify copied to clipboard

Optimize the code

Open lbx2015 opened this issue 9 years ago • 1 comments

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;
    

    } }

lbx2015 avatar Jan 07 '16 09:01 lbx2015

feel free to contact me.

lbx2015 avatar Jan 07 '16 09:01 lbx2015