/**
* @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);
}
java类android.graphics.Paint.FontMetrics的实例源码
TitleBitmapFactory.java 文件源码
项目:AndroidChromium
阅读 41
收藏 0
点赞 0
评论 0
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);
}