java类android.graphics.Paint.FontMetrics的实例源码

TitleBitmapFactory.java 文件源码 项目:AndroidChromium 阅读 41 收藏 0 点赞 0 评论 0
/**
 * @param context   The current Android's context.
 * @param incognito Whether the title are for incognito mode.
 * @param nullFaviconResourceId A drawable resource id of a default favicon.
 */
public TitleBitmapFactory(Context context, boolean incognito, int nullFaviconResourceId) {
    mNullFaviconResourceId = nullFaviconResourceId;

    Resources res = context.getResources();
    int textColor = ApiCompatibilityUtils.getColor(res, incognito
            ? R.color.compositor_tab_title_bar_text_incognito
            : R.color.compositor_tab_title_bar_text);
    float textSize = res.getDimension(R.dimen.compositor_tab_title_text_size);

    boolean fakeBoldText = res.getBoolean(R.bool.compositor_tab_title_fake_bold_text);

    mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
    mTextPaint.setColor(textColor);

    mTextPaint.setTextSize(textSize);
    mTextPaint.setFakeBoldText(fakeBoldText);
    mTextPaint.density = res.getDisplayMetrics().density;

    FontMetrics textFontMetrics = mTextPaint.getFontMetrics();
    mTextHeight = (float) Math.ceil(textFontMetrics.bottom - textFontMetrics.top);
    mTextYOffset = -textFontMetrics.top;

    mFaviconDimension = res.getDimensionPixelSize(R.dimen.compositor_tab_title_favicon_size);
    mViewHeight = (int) Math.max(mFaviconDimension, mTextHeight);

    int width = res.getDisplayMetrics().widthPixels;
    int height = res.getDisplayMetrics().heightPixels;
    mMaxWidth = (int) (TITLE_WIDTH_PERCENTAGE * Math.max(width, height));

    // Set the favicon dimension here.
    mFaviconDimension = Math.min(mMaxWidth, mFaviconDimension);
}
TextMessageWithLinkAndIconPreference.java 文件源码 项目:AndroidChromium 阅读 25 收藏 0 点赞 0 评论 0
@Override
public View onCreateView(ViewGroup parent) {
    View view = super.onCreateView(parent);

    if (mNoBottomSpacing) {
        ApiCompatibilityUtils.setPaddingRelative(
                view,
                ApiCompatibilityUtils.getPaddingStart(view),
                view.getPaddingTop(),
                ApiCompatibilityUtils.getPaddingEnd(view),
                0);
    }

    ((TextView) view.findViewById(android.R.id.summary)).setMovementMethod(
            LinkMovementMethod.getInstance());

    // The icon is aligned to the top of the text view, which can be higher than the
    // ascender line of the text, and makes it look aligned improperly.
    TextView textView = (TextView) view.findViewById(
            getTitle() != null ? android.R.id.title : android.R.id.summary);
    FontMetrics metrics = textView.getPaint().getFontMetrics();
    ImageView icon = (ImageView) view.findViewById(android.R.id.icon);
    ApiCompatibilityUtils.setPaddingRelative(
            icon, 0, (int) java.lang.Math.ceil(metrics.ascent - metrics.top), 0, 0);

    return view;
}
DrawTextUtils.java 文件源码 项目:BigApp_Discuz_Android 阅读 19 收藏 0 点赞 0 评论 0
/**
 * 得到字符串信息包括行数,页数等信息
 */
public void GetTextIfon() {
    char ch;
    int w = 0;
    int istart = 0;
    FontMetrics fm = mPaint.getFontMetrics();// 得到系统默认字体属性
    mFontHeight = (int) (Math.ceil(fm.descent - fm.top) + 2);// 获得字体高度
    mPageLineNum = mTextHeight / mFontHeight;// 获得行数
    int count = this.mStrText.length();
    for (int i = 0; i < count; i++) {
        ch = this.mStrText.charAt(i);
        float[] widths = new float[1];
        String str = String.valueOf(ch);
        mPaint.getTextWidths(str, widths);
        if (ch == '\n') {//原为\n
            mRealLine++;// 真实的行数加一
            mString.addElement(this.mStrText.substring(istart, i));
            istart = i + 1;
            w = 0;
        } else {
            w += (int) Math.ceil(widths[0]);
            if (w > this.mTextWidth) {
                mRealLine++;// 真实的行数加一
                mString.addElement(this.mStrText.substring(istart, i));
                istart = i;
                i--;
                w = 0;
            } else {
                if (i == count - 1) {
                    mRealLine++;// 真实的行数加一
                    mString.addElement(this.mStrText.substring(istart,
                            count));
                }
            }
        }
    }
}
MultipleVerticalTextView.java 文件源码 项目:Diary 阅读 18 收藏 0 点赞 0 评论 0
private void CalculateText() {
        paint.setTextSize(mFontSize);
        //获得字宽
        if (mLineWidth == 0) {
            paint.getTextWidths("正", widths);//获取单个汉字的宽度
            paint.getTextWidths(" ", space);
//            mLineWidth = (int) Math.ceil((widths[0] + space[0]) * 1.1 + 2);
            mLineWidth = (int) Math.ceil((widths[0] + space[0]) * 1.1 + 2)  //获得字体宽度
                    + DisplayUtil.dp2px(getContext(), 2);                  //增加间距
        }

        FontMetrics fm = paint.getFontMetrics();
//        mFontHeight = (int) (Math.ceil(fm.descent - fm.top) * 0.9);// 获得字体高度
        mFontHeight = (int) (Math.ceil(fm.descent - fm.ascent)) // 获得字体高度
                + DisplayUtil.dp2px(getContext(), 2);          //增加间距
        //计算文字行数
        mRealLine = 0;
        for (int i = 0; i < this.TextLength; i++) {
            ch = this.text.charAt(i);
            if (ch == '\n') {
                mRealLine++;// 真实的行数加一
                h = 0;
            } else {
                h += mFontHeight;
                if (h > this.mTextHeight) {
                    mRealLine++;// 真实的行数加一
                    i--;
                    h = 0;
                } else {
                    if (i == this.TextLength - 1) {
                        mRealLine++;// 真实的行数加一
                    }
                }
            }
        }
        mRealLine += 1;//额外增加一行
        mTextWidth = mLineWidth * mRealLine;//计算文字总宽度
        measure(mTextWidth, getHeight());//重新调整大小
        layout(getLeft(), getTop(), getLeft() + mTextWidth, getBottom());//重新绘制容器
    }
LyricView.java 文件源码 项目:RhymeMusic 阅读 24 收藏 0 点赞 0 评论 0
private void initView()
{
    mPaint = new TextPaint();
    mPaint.setTextSize(mTextSize);
    mPaint.setTextAlign(Align.CENTER);
    mPaint.setAntiAlias(true);

    // 计算字体高度
    FontMetrics fm = mPaint.getFontMetrics();
    mTextHeight = (int) (fm.bottom - fm.top);

    // 滚动动画
    mLineAnimator = new ValueAnimator();
    mLineAnimator.setIntValues(0, 100);
    mLineAnimator.setDuration(mLineAnimDuration);
    mLineAnimator.addUpdateListener(new AnimatorUpdateListener()
    {
        @Override
        public void onAnimationUpdate(ValueAnimator animation)
        {
            int value = (Integer) animation.getAnimatedValue();
            float percent = 1 - (float) value / 100;
            mLineOffset = (int) (mAnimOffset * percent); // 更新偏移值,重绘View
            invalidate();
        }
    });
}
ColumnHeader.java 文件源码 项目:iOffice 阅读 28 收藏 0 点赞 0 评论 0
private void drawFirstVisibleColumn(Canvas canvas, float zoom, Paint paint)
{
    FontMetrics fm = paint.getFontMetrics();  
    float visibleColumnWidth = 0;
    SheetScroller minRowAndColumnInformation = sheetview.getMinRowAndColumnInformation();
    //draw rest part of first column
    float columnWidht = (minRowAndColumnInformation.getColumnWidth() * zoom);
    visibleColumnWidth = (float)(minRowAndColumnInformation.getVisibleColumnWidth() * zoom);
    // 绘制header
    if(HeaderUtil.instance().isActiveColumn(sheetview.getCurrentSheet(), minRowAndColumnInformation.getMinColumnIndex()))
    {
        paint.setColor(SSConstant.ACTIVE_COLOR);
    }
    else
    {
        paint.setColor(SSConstant.HEADER_FILL_COLOR);
    }

    rect.set((int)x, 0, (int)(x + visibleColumnWidth), columnHeaderHeight);
    canvas.drawRect(rect, paint);        

    //header line
    paint.setColor(SSConstant.HEADER_GRIDLINE_COLOR);
    canvas.drawRect(x, 0, x + 1, columnHeaderHeight, paint);

    // 绘制文本
    canvas.save();
    canvas.clipRect(rect);
    paint.setColor(SSConstant.HEADER_TEXT_COLOR);

    String rowText = HeaderUtil.instance().getColumnHeaderTextByIndex(minRowAndColumnInformation.getMinColumnIndex());
    float textWidth = paint.measureText(rowText);
    float textX = (columnWidht - textWidth) / 2;
    float textY = (int)(columnHeaderHeight - Math.ceil(fm.descent - fm.ascent)) / 2;
    canvas.drawText(rowText, x + textX - (columnWidht - visibleColumnWidth), textY - fm.ascent, paint);

    canvas.restore();
}
AbstractChart.java 文件源码 项目:iOffice 阅读 22 收藏 0 点赞 0 评论 0
/**
 * single legend width and height
 * @param renderer
 * @param titles
 * @param paint
 * @param chartWidth
 * @return
 */
public Rectangle getSingleAutoLegendSize(DefaultRenderer renderer, String[] titles, Paint paint, int legendWidth)
{
 float width = -1f;
 float height = -1f;

 paint.setTextSize(renderer.getLegendTextSize() * renderer.getZoomRate());
 int seriesCnt = Math.min(titles.length, renderer.getSeriesRendererCount());
    for (int i = 0; i < seriesCnt; i++)
    {
      String text = titles[i].replace("\n", " ");
      //the rest cell
        FontMetrics fm = paint.getFontMetrics();        
        // 文本高度
        height = Math.max((float)(Math.ceil(fm.descent - fm.ascent)), height);  
        // 文本宽度
        width = Math.max((float)(paint.measureText(text)), width);
    }

    float maxLegendTextWidth = legendWidth - getLegendShapeWidth(0) * renderer.getZoomRate() * 2;
    if(width > maxLegendTextWidth)
 {
  //the max width legend shape layout more than one lines
  int lines = (int)Math.ceil(width / maxLegendTextWidth);
  return new Rectangle(legendWidth, (int)Math.ceil(height) * lines);
 }
 else
 {
  return new Rectangle((int)Math.ceil(width + getLegendShapeWidth(0) * renderer.getZoomRate() * 2), (int)Math.ceil(height));
 }
}
FunDrawable.java 文件源码 项目:FunEditText-Android 阅读 19 收藏 0 点赞 0 评论 0
@Override
public void draw(Canvas canvas) {
    if (first) {
        invalidateXY();
        if (!mEditText.isFocused() && mEditText.getText().length() == 0)
            down();
        first = false;
    }

    FontMetrics fm = mTextPaint.getFontMetrics();
    float baseline = 0 - fm.top;
    float mTxtHeight = fm.bottom - fm.top;
    float mTxtWidth = mTextPaint.measureText(hintText);
    mRectF.set(xOffset, yOffset - baseline, xOffset + mTxtWidth, yOffset
            - baseline + mTxtHeight);

    canvas.save();
    canvas.clipRect(mRectF, Region.Op.DIFFERENCE);
    mShape.resize(canvas.getWidth(), canvas.getHeight() - mPaddingTop);
    canvas.translate(0, mPaddingTop);
    mShape.draw(canvas, mPaint);
    canvas.restore();

    mTextPaint.setTextSize(mEditText.getTextSize());
    mTextPaint.setColor(mColor);

    canvas.drawText(hintText, xOffset, yOffset, mTextPaint);
}
TerminalBridge.java 文件源码 项目:connectbot 阅读 33 收藏 0 点赞 0 评论 0
/**
 * Request a different font size. Will make call to parentChanged() to make
 * sure we resize PTY if needed.
 */
/* package */ final void setFontSize(float size) {
    if (size <= 0.0)
        return;

    defaultPaint.setTextSize(size);
    fontSize = size;

    // read new metrics to get exact pixel dimensions
    FontMetrics fm = defaultPaint.getFontMetrics();
    charTop = (int)Math.ceil(fm.top);

    float[] widths = new float[1];
    defaultPaint.getTextWidths("X", widths);
    charWidth = (int)Math.ceil(widths[0]);
    charHeight = (int)Math.ceil(fm.descent - fm.top);

    // refresh any bitmap with new font size
    if(parent != null)
        parentChanged(parent);

    for (FontSizeChangedListener ofscl : fontSizeChangedListeners)
        ofscl.onFontSizeChanged(size);

    host.setFontSize((int) fontSize);
    manager.hostdb.updateFontSize(host);

    forcedSize = false;
}
AbMonitorView.java 文件源码 项目:EntboostIM 阅读 59 收藏 0 点赞 0 评论 0
/**
 * 描述:TODO.
 *
 * @param canvas the canvas
 * @see android.view.View#onDraw(android.graphics.Canvas)
 * @author: amsoft.cn
 * @date:2013-6-17 上午9:04:49
 * @version v1.0
 */
@Override
protected void onDraw(Canvas canvas) {

    //if(D)Log4jLog.d(LONG_TAG, "--AbMonitorView onDraw--");
    canvas.drawColor(Color.argb(80, 0, 0, 0));
    if (mStartTime == -1) {
        mStartTime = SystemClock.elapsedRealtime();
        mCounter = 0;
    }

    long now = SystemClock.elapsedRealtime();
    long delay = now - mStartTime;

    if(delay!=0){
        // 计算帧速率
        mFps = (int)(mCounter * 1000 / delay);
    }

       String text = mFps + " fps";
       //获取值的文本的高度
       TextPaint mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
       mTextPaint.setTypeface(Typeface.DEFAULT);
       mTextPaint.setTextSize(16);
       FontMetrics fm  = mTextPaint.getFontMetrics();
       //得到行高
       int textHeight = (int)Math.ceil(fm.descent - fm.ascent)+2;
       int textWidth = (int)AbGraphical.getStringWidth(text,mTextPaint);


    canvas.drawText(text,(this.getWidth()-textWidth)/2, textHeight, mPaint);
    if (delay > 1000L) {
        mStartTime = now;
        mFps = mCounter;
        mCounter = 0;
    }
    mCounter++;
    super.onDraw(canvas);
}


问题


面经


文章

微信
公众号

扫码关注公众号