android.graphics.Paint#measureText ( )源码实例Demo

下面列出了android.graphics.Paint#measureText ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: SimplifySpan   文件: CustomLabelSpan.java
private float initFinalWidth(Paint paint) {
    if (mFinalWidth <= 0) {
        float labelTextSize = mSpecialLabelUnit.getLabelTextSize();
        if (labelTextSize > 0 && labelTextSize != paint.getTextSize()) {
            paint.setTextSize(labelTextSize);
        }

        int labelBgWidth = mSpecialLabelUnit.getLabelBgWidth();
        mSpecialTextWidth = paint.measureText(mSpecialText, 0, mSpecialText.length());
        if (labelBgWidth > 0 && labelBgWidth > mSpecialTextWidth) {
            mFinalWidth = labelBgWidth;
        } else {
            mFinalWidth = mSpecialTextWidth + mPaddingLeft + mPaddingRight;
        }
    }

    return mFinalWidth;
}
 
源代码2 项目: memoir   文件: NumberSpan.java
@Override
public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom,
                              CharSequence text, int start, int end, boolean first, Layout l) {

    Spanned spanned = (Spanned) text;
    if (!mIgnoreSpan && spanned.getSpanStart(this) == start) {
        // set paint
        Paint.Style oldStyle = p.getStyle();
        float oldTextSize = p.getTextSize();
        p.setStyle(Paint.Style.FILL);
        mTextSize = baseline - top;
        p.setTextSize(mTextSize);
        mWidth = p.measureText(mNr + ".");

        // draw the number
        c.drawText(mNr + ".", x, baseline, p);

        // restore paint
        p.setStyle(oldStyle);
        p.setTextSize(oldTextSize);
    }
}
 
源代码3 项目: Klyph   文件: TitlePageIndicator.java
/**
 * Calculate the bounds for a view's title
 *
 * @param index
 * @param paint
 * @return
 */
private Rect calcBounds(int index, Paint paint) {
    //Calculate the text bounds
    Rect bounds = new Rect();
    CharSequence title = getTitle(index);
    bounds.right = (int) paint.measureText(title, 0, title.length());
    bounds.bottom = (int) (paint.descent() - paint.ascent());
    return bounds;
}
 
源代码4 项目: AlignTextView   文件: AlignTextView.java
/**
 * 计算每行应显示的文本数
 *
 * @param text 要计算的文本
 */
private void calc(Paint paint, String text) {
    if (text.length() == 0) {
        lines.add("\n");
        return;
    }
    int startPosition = 0; // 起始位置
    float oneChineseWidth = paint.measureText("中");
    int ignoreCalcLength = (int) (width / oneChineseWidth); // 忽略计算的长度
    StringBuilder sb = new StringBuilder(text.substring(0, Math.min(ignoreCalcLength + 1,
            text.length())));

    for (int i = ignoreCalcLength + 1; i < text.length(); i++) {
        if (paint.measureText(text.substring(startPosition, i + 1)) > width) {
            startPosition = i;
            //将之前的字符串加入列表中
            lines.add(sb.toString());

            sb = new StringBuilder();

            //添加开始忽略的字符串,长度不足的话直接结束,否则继续
            if ((text.length() - startPosition) > ignoreCalcLength) {
                sb.append(text.substring(startPosition, startPosition + ignoreCalcLength));
            } else {
                lines.add(text.substring(startPosition));
                break;
            }

            i = i + ignoreCalcLength - 1;
        } else {
            sb.append(text.charAt(i));
        }
    }
    if (sb.length() > 0) {
        lines.add(sb.toString());
    }

    tailLines.add(lines.size() - 1);
}
 
源代码5 项目: android-project-wo2b   文件: TitlePageIndicator.java
/**
 * Calculate the bounds for a view's title
 *
 * @param index
 * @param paint
 * @return
 */
private Rect calcBounds(int index, Paint paint) {
    //Calculate the text bounds
    Rect bounds = new Rect();
    CharSequence title = getTitle(index);
    bounds.right = (int) paint.measureText(title, 0, title.length());
    bounds.bottom = (int) (paint.descent() - paint.ascent());
    return bounds;
}
 
源代码6 项目: android-card-form   文件: SlashSpan.java
@Override
public int getSize(Paint paint, CharSequence text, int start, int end, FontMetricsInt fm) {
    float padding = paint.measureText(" ", 0, 1) * 2;
    float slash = paint.measureText("/", 0, 1);
    float textSize = paint.measureText(text, start, end);
    return (int) (padding + slash + textSize);
}
 
源代码7 项目: SprintNBA   文件: AutoSplitTextView.java
@NonNull
private String autoSplitText(final TextView tv) {
    final String rawText = tv.getText().toString(); //原始文本
    final Paint tvPaint = tv.getPaint(); //paint,包含字体等信息
    final float tvWidth = tv.getWidth() - tv.getPaddingLeft() - tv.getPaddingRight(); //控件可用宽度
    
    //将原始文本按行拆分
    String [] rawTextLines = rawText.replaceAll("\r", "").split("\n");
    StringBuilder sbNewText = new StringBuilder();
    for (String rawTextLine : rawTextLines) {
        if (tvPaint.measureText(rawTextLine) <= tvWidth) {
            //如果整行宽度在控件可用宽度之内,就不处理了
            sbNewText.append(rawTextLine);
        } else {
            //如果整行宽度超过控件可用宽度,则按字符测量,在超过可用宽度的前一个字符处手动换行
            float lineWidth = 0;
            for (int cnt = 0; cnt != rawTextLine.length(); ++cnt) {
                char ch = rawTextLine.charAt(cnt);
                lineWidth += tvPaint.measureText(String.valueOf(ch));
                if (lineWidth <= tvWidth) {
                    sbNewText.append(ch);
                } else {
                    sbNewText.append("\n");
                    lineWidth = 0;
                    --cnt;
                }
            }
        }
        sbNewText.append("\n");
    }
    
    //把结尾多余的\n去掉
    if (!rawText.endsWith("\n")) {
        sbNewText.deleteCharAt(sbNewText.length() - 1);
    }
    
    return sbNewText.toString();
}
 
@Override
public int getSize(
    Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
  this.paint.setColor(paint.getColor());

  width = (int) (paint.measureText(text, start, end) + this.paint.getStrokeWidth());
  return width;
}
 
private void drawText(String text, Canvas c, RectF button, Paint p) {
    float textSize = 60;
    p.setColor(Color.WHITE);
    p.setAntiAlias(true);
    p.setTextSize(textSize);

    float textWidth = p.measureText(text);
    c.drawText(text, button.centerX()-(textWidth/2), button.centerY()+(textSize/2), p);
}
 
源代码10 项目: mil-sym-android   文件: SinglePointRenderer.java
public Bitmap getTestSymbol()
 {
     Bitmap temp = null;
     try
     {
         temp = Bitmap.createBitmap(70, 70, Config.ARGB_8888);

         Canvas canvas = new Canvas(temp);

         if (canvas.isHardwareAccelerated())
         {
             System.out.println("HW acceleration supported");
         }
//canvas.drawColor(Color.WHITE);

         //Typeface tf = Typeface.createFromAsset(_am, "fonts/unitfonts.ttf");
         Typeface tf = _tfUnits;

         Paint fillPaint = new Paint();
         fillPaint.setStyle(Paint.Style.FILL);
         fillPaint.setColor(Color.CYAN.toInt());
         fillPaint.setTextSize(50);
         fillPaint.setAntiAlias(true);
         fillPaint.setTextAlign(Align.CENTER);
         fillPaint.setTypeface(tf);

         Paint framePaint = new Paint();
         framePaint.setStyle(Paint.Style.FILL);
         framePaint.setColor(Color.BLACK.toInt());
         framePaint.setTextSize(50);
         framePaint.setAntiAlias(true);
         framePaint.setTextAlign(Align.CENTER);
         framePaint.setTypeface(tf);

         Paint symbolPaint = new Paint();
         symbolPaint.setStyle(Paint.Style.FILL);
         symbolPaint.setColor(Color.BLACK.toInt());
         symbolPaint.setTextSize(50);
         symbolPaint.setAntiAlias(true);
         symbolPaint.setTextAlign(Align.CENTER);
         symbolPaint.setTypeface(tf);

         String strFill = String.valueOf((char) 800);
         String strFrame = String.valueOf((char) 801);
         String strSymbol = String.valueOf((char) 1121);

         canvas.drawText(strFill, 35, 35, fillPaint);
         canvas.drawText(strFrame, 35, 35, framePaint);
         canvas.drawText(strSymbol, 35, 35, symbolPaint);

         FontMetrics mf = framePaint.getFontMetrics();
         float height = mf.bottom - mf.top;
         float width = fillPaint.measureText(strFrame);

         Log.i(TAG, "top: " + String.valueOf(mf.top));
         Log.i(TAG, "bottom: " + String.valueOf(mf.bottom));
         Log.i(TAG, "ascent: " + String.valueOf(mf.ascent));
         Log.i(TAG, "descent: " + String.valueOf(mf.descent));
         Log.i(TAG, "leading: " + String.valueOf(mf.leading));
         Log.i(TAG, "width: " + String.valueOf(width));
         Log.i(TAG, "height: " + String.valueOf(height));

     }
     catch (Exception exc)
     {
         Log.e(TAG, exc.getMessage());
         Log.e(TAG, getStackTrace(exc));
     }

     return temp;
 }
 
源代码11 项目: tilt-game-android   文件: SmallAnimatedTextView.java
@Override
		public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
			int size = (int) paint.measureText(text, start, end);
//			Log.d(TAG, "text: " + text + ", letter: " + text.charAt(start) + "size: " + size);
			return size;
		}
 
源代码12 项目: Wrox-ProfessionalAndroid-4E   文件: CompassView.java
public CompassView(Context context, AttributeSet attrs,
                   int defStyleAttr) {
  super(context, attrs, defStyleAttr);

  setFocusable(true);
  final TypedArray a = context.obtainStyledAttributes(attrs,
    R.styleable.CompassView, defStyleAttr, 0);
  if (a.hasValue(R.styleable.CompassView_bearing)) {
    setBearing(a.getFloat(R.styleable.CompassView_bearing, 0));
  }
  a.recycle();

  Context c = this.getContext();
  Resources r = this.getResources();

  circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
  circlePaint.setColor(ContextCompat.getColor(c, R.color.background_color));
  circlePaint.setStrokeWidth(1);
  circlePaint.setStyle(Paint.Style.FILL_AND_STROKE);
  circlePaint.setStyle(Paint.Style.STROKE);

  northString = r.getString(R.string.cardinal_north);
  eastString = r.getString(R.string.cardinal_east);
  southString = r.getString(R.string.cardinal_south);
  westString = r.getString(R.string.cardinal_west);

  textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
  textPaint.setColor(ContextCompat.getColor(c, R.color.text_color));
  textPaint.setTextSize(40);
  textPaint.setFakeBoldText(true);
  textPaint.setSubpixelText(true);
  textPaint.setTextAlign(Paint.Align.LEFT);
  textPaint.setTextSize(30);

  textHeight = (int)textPaint.measureText("yY");

  markerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
  markerPaint.setColor(ContextCompat.getColor(c, R.color.marker_color));
  markerPaint.setAlpha(200);
  markerPaint.setStrokeWidth(1);
  markerPaint.setStyle(Paint.Style.STROKE);
  markerPaint.setShadowLayer(2, 1, 1, ContextCompat.getColor(c,
    R.color.shadow_color));

  borderGradientColors = new int[4];
  borderGradientPositions = new float[4];
  borderGradientColors[3] = ContextCompat.getColor(c,
    R.color.outer_border);
  borderGradientColors[2] = ContextCompat.getColor(c,
    R.color.inner_border_one);
  borderGradientColors[1] = ContextCompat.getColor(c,
    R.color.inner_border_two);
  borderGradientColors[0] = ContextCompat.getColor(c,
    R.color.inner_border);
  borderGradientPositions[3] = 0.0f;
  borderGradientPositions[2] = 1-0.03f;
  borderGradientPositions[1] = 1-0.06f;
  borderGradientPositions[0] = 1.0f;

  glassGradientColors = new int[5];
  glassGradientPositions = new float[5];

  int glassColor = 245;
  glassGradientColors[4] = Color.argb(65, glassColor,
    glassColor, glassColor);
  glassGradientColors[3] = Color.argb(100, glassColor,
    glassColor, glassColor);
  glassGradientColors[2] = Color.argb(50, glassColor,
    glassColor, glassColor);
  glassGradientColors[1] = Color.argb(0, glassColor,
    glassColor, glassColor);
  glassGradientColors[0] = Color.argb(0, glassColor,
    glassColor, glassColor);
  glassGradientPositions[4] = 1-0.0f;
  glassGradientPositions[3] = 1-0.06f;
  glassGradientPositions[2] = 1-0.10f;
  glassGradientPositions[1] = 1-0.20f;
  glassGradientPositions[0] = 1-1.0f;

  skyHorizonColorFrom = ContextCompat.getColor(c,
    R.color.horizon_sky_from);
  skyHorizonColorTo = ContextCompat.getColor(c,
    R.color.horizon_sky_to);
  groundHorizonColorFrom = ContextCompat.getColor(c,
    R.color.horizon_ground_from);
  groundHorizonColorTo = ContextCompat.getColor(c,
    R.color.horizon_ground_to);
}
 
public float getTextWidth(Paint textPaint, String text) {
	return textPaint.measureText(text);
}
 
源代码14 项目: imsdk-android   文件: BadgeHelper.java
private float getTextWidth(String text, Paint p) {
    return p.measureText(text, 0, text.length());
}
 
源代码15 项目: SmartChart   文件: NumberPickerView.java
private int getTextWidth(CharSequence text, Paint paint){
    if(!TextUtils.isEmpty(text)){
        return (int)(paint.measureText(text.toString()) + 0.5f);
    }
    return 0;
}
 
源代码16 项目: audio-analyzer-for-android   文件: AnalyzerViews.java
private PopupWindow popupMenuCreate(String[] popUpContents, int resId) {

        // initialize a pop up window type
        PopupWindow popupWindow = new PopupWindow(activity);

        // the drop down list is a list view
        ListView listView = new ListView(activity);

        // set our adapter and pass our pop up window contents
        ArrayAdapter<String> aa = popupMenuAdapter(popUpContents);
        listView.setAdapter(aa);

        // set the item click listener
        listView.setOnItemClickListener(activity);

        // button resource ID, so we can trace back which button is pressed
        listView.setTag(resId);

        // get max text width
        Paint mTestPaint = new Paint();
        mTestPaint.setTextSize(listItemTextSize);
        float w = 0;  // max text width in pixel
        float wi;
        for (String popUpContent : popUpContents) {
            String sts[] = popUpContent.split("::");
            if (sts.length == 0) continue;
            String st = sts[0];
            if (sts.length == 2 && sts[1].equals("0")) {
                mTestPaint.setTextSize(listItemTitleTextSize);
                wi = mTestPaint.measureText(st);
                mTestPaint.setTextSize(listItemTextSize);
            } else {
                wi = mTestPaint.measureText(st);
            }
            if (w < wi) {
                w = wi;
            }
        }

        // left and right padding, at least +7, or the whole app will stop respond, don't know why
        w = w + 23 * DPRatio;
        if (w < 40 * DPRatio) {
            w = 40 * DPRatio;
        }

        // some other visual settings
        popupWindow.setFocusable(true);
        popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
        // Set window width according to max text width
        popupWindow.setWidth((int)w);
        // also set button width
        ((Button) activity.findViewById(resId)).setWidth((int)(w + 5 * DPRatio));
        // Set the text on button in loadPreferenceForView()

        // set the list view as pop up window content
        popupWindow.setContentView(listView);

        return popupWindow;
    }
 
源代码17 项目: TabRadioButton   文件: TabRadioButton.java
private float getFontWidth(Paint paint, String text) {
    return paint.measureText(text);
}
 
源代码18 项目: SmileyRating   文件: SmileRating.java
private void drawTextCentered(String text, float x, float y, Paint paint, Canvas canvas) {
    float xPos = x - (paint.measureText(text) / 2);
    float yPos = (y - ((paint.descent() + paint.ascent()) / 2));

    canvas.drawText(text, xPos, yPos, paint);
}
 
public void draw(Canvas canvas) {
    Paint indexbarPaint = new Paint();
    indexbarPaint.setColor(Color.parseColor(indexbarBackgroudColor));
    indexbarPaint.setAlpha(indexbarBackgroudAlpha);
    indexbarPaint.setAntiAlias(true);
    canvas.drawRoundRect(mIndexbarRect, setIndexBarCornerRadius * mDensity, setIndexBarCornerRadius * mDensity, indexbarPaint);

    if (mSections != null && mSections.length > 0) {
        // Preview is shown when mCurrentSection is set
        if (mCurrentSection >= 0) {
            Paint previewPaint = new Paint();
            previewPaint.setColor(Color.BLACK);
            previewPaint.setAlpha(96);
            previewPaint.setAntiAlias(true);
            previewPaint.setShadowLayer(3, 0, 0, Color.argb(64, 0, 0, 0));

            Paint previewTextPaint = new Paint();
            previewTextPaint.setColor(Color.WHITE);
            previewTextPaint.setAntiAlias(true);
            previewTextPaint.setTextSize(50 * mScaledDensity);
            previewTextPaint.setTypeface(setTypeface);

            float previewTextWidth = previewTextPaint.measureText(mSections[mCurrentSection]);
            float previewSize = 2 * mPreviewPadding + previewTextPaint.descent() - previewTextPaint.ascent();
            RectF previewRect = new RectF((mListViewWidth - previewSize) / 2
                    , (mListViewHeight - previewSize) / 2
                    , (mListViewWidth - previewSize) / 2 + previewSize
                    , (mListViewHeight - previewSize) / 2 + previewSize);

            canvas.drawRoundRect(previewRect, 5 * mDensity, 5 * mDensity, previewPaint);
            canvas.drawText(mSections[mCurrentSection], previewRect.left + (previewSize - previewTextWidth) / 2 - 1
                    , previewRect.top + mPreviewPadding - previewTextPaint.ascent() + 1, previewTextPaint);
            fade(300);
        }

        Paint indexPaint = new Paint();
        indexPaint.setColor(Color.parseColor(indexbarTextColor));
        indexPaint.setAntiAlias(true);
        indexPaint.setTextSize(setIndexTextSize * mScaledDensity);
        indexPaint.setTypeface(setTypeface);

        float sectionHeight = (mIndexbarRect.height() - 2 * mIndexbarMargin) / mSections.length;
        float paddingTop = (sectionHeight - (indexPaint.descent() - indexPaint.ascent())) / 2;
        for (int i = 0; i < mSections.length; i++) {
            float paddingLeft = (mIndexbarWidth - indexPaint.measureText(mSections[i])) / 2;
            canvas.drawText(mSections[i], mIndexbarRect.left + paddingLeft
                    , mIndexbarRect.top + mIndexbarMargin + sectionHeight * i + paddingTop - indexPaint.ascent(), indexPaint);
        }
    }
}
 
源代码20 项目: ClockView   文件: ProfitsChartView.java
public float getFontWidth(Paint paint, String text) {
    return paint.measureText(text);
}