Android examples for Graphics:Font
get Reference Char Width by font
/*//from w w w . j a v a 2 s . c om * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //package com.java2s; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; import android.util.SparseArray; public class Main { private static final char[] KEY_LABEL_REFERENCE_CHAR = { 'M' }; private static final SparseArray<Float> sTextWidthCache = new SparseArray<>(); private static final Rect sTextWidthBounds = new Rect(); public static float getReferenceCharWidth(final Paint paint) { return getCharWidth(KEY_LABEL_REFERENCE_CHAR, paint); } private static float getCharWidth(final char[] referenceChar, final Paint paint) { final int key = getCharGeometryCacheKey(referenceChar[0], paint); synchronized (sTextWidthCache) { final Float cachedValue = sTextWidthCache.get(key); if (cachedValue != null) { return cachedValue; } paint.getTextBounds(referenceChar, 0, 1, sTextWidthBounds); final float width = sTextWidthBounds.width(); sTextWidthCache.put(key, width); return width; } } private static int getCharGeometryCacheKey(final char referenceChar, final Paint paint) { final int labelSize = (int) paint.getTextSize(); final Typeface face = paint.getTypeface(); final int codePointOffset = referenceChar << 15; if (face == Typeface.DEFAULT) { return codePointOffset + labelSize; } else if (face == Typeface.DEFAULT_BOLD) { return codePointOffset + labelSize + 0x1000; } else if (face == Typeface.MONOSPACE) { return codePointOffset + labelSize + 0x2000; } else { return codePointOffset + labelSize; } } }