Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize the code #151

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open

Optimize the code #151

wants to merge 2 commits into from

Conversation

lbx2015
Copy link

@lbx2015 lbx2015 commented Jan 7, 2016

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
Copy link
Author

lbx2015 commented Jan 7, 2016

feel free to contact me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants