Apidemo学习 TextAlign Typefaces 切换字体 UnicodeChart

来源:互联网 发布:淘宝网雪纺吊带衫 编辑:程序博客网 时间:2024/05/05 23:46



public class TextAlign extends GraphicsActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new SampleView(this));    }    private static class SampleView extends View {        private Paint   mPaint;        private float   mX;        private float[] mPos;        private Path    mPath;        private Paint   mPathPaint;        private static final int DY = 30;        private static final String TEXT_L = "Left";        private static final String TEXT_C = "Center";        private static final String TEXT_R = "Right";        private static final String POSTEXT = "Positioned";        private static final String TEXTONPATH = "Along a path";        private static void makePath(Path p) {            p.moveTo(10, 0);//绘制波浪线            p.cubicTo(100, -50, 200, 50, 300, 0);        }        private float[] buildTextPositions(String text, float y, Paint paint) {            float[] widths = new float[text.length()];            // initially get the widths for each char            int n = paint.getTextWidths(text, widths);//把text中每个文字的宽度复制到widths数组中, n是text中的字数            // now populate the array, interleaving spaces for the Y values            float[] pos = new float[n * 2];//填充x y的位置            float accumulatedX = 0;            for (int i = 0; i < n; i++) {                pos[i*2 + 0] = accumulatedX;                pos[i*2 + 1] = y;                accumulatedX += widths[i];            }            return pos;        }        public SampleView(Context context) {            super(context);            setFocusable(true);            mPaint = new Paint();            mPaint.setAntiAlias(true);            mPaint.setTextSize(30);            mPaint.setTypeface(Typeface.SERIF);            mPos = buildTextPositions(POSTEXT, 0, mPaint);            mPath = new Path();            makePath(mPath);            mPathPaint = new Paint();            mPathPaint.setAntiAlias(true);            mPathPaint.setColor(0x800000FF);            mPathPaint.setStyle(Paint.Style.STROKE);        }        @Override protected void onDraw(Canvas canvas) {            canvas.drawColor(Color.WHITE);            Paint p = mPaint;            float x = mX;            float y = 0;            float[] pos = mPos;            // draw the normal strings 绘制普通的文字            p.setColor(0x80FF0000);            canvas.drawLine(x, y, x, y+DY*3, p);            p.setColor(Color.BLACK);            canvas.translate(0, DY);//三种对齐方式  以x左对齐            p.setTextAlign(Paint.Align.LEFT);            canvas.drawText(TEXT_L, x, y, p);            canvas.translate(0, DY);//下移            p.setTextAlign(Paint.Align.CENTER);//以x中间对齐            canvas.drawText(TEXT_C, x, y, p);            canvas.translate(0, DY);//右对齐            p.setTextAlign(Paint.Align.RIGHT);            canvas.drawText(TEXT_R, x, y, p);            canvas.translate(100, DY*2);            // now draw the positioned strings            p.setColor(0xBB00FF00);            for (int i = 0; i < pos.length/2; i++) { //绘制一个网格                canvas.drawLine(pos[i*2+0], pos[i*2+1]-DY,                                pos[i*2+0], pos[i*2+1]+DY*2, p);            }            p.setColor(Color.BLACK);            p.setTextAlign(Paint.Align.LEFT);            canvas.drawPosText(POSTEXT, pos, p);//可以通过位置数组来一个一个位置绘制文字,在参考点左边            canvas.translate(0, DY);            p.setTextAlign(Paint.Align.CENTER);//中间            canvas.drawPosText(POSTEXT, pos, p);            canvas.translate(0, DY);            p.setTextAlign(Paint.Align.RIGHT); //右边            canvas.drawPosText(POSTEXT, pos, p);            // now draw the text on path 可以根据路径来绘制文字            canvas.translate(-100, DY*2);            canvas.drawPath(mPath, mPathPaint);            p.setTextAlign(Paint.Align.LEFT);//在路径的左边            canvas.drawTextOnPath(TEXTONPATH, mPath, 0, 0, p);            canvas.translate(0, DY*1.5f);            canvas.drawPath(mPath, mPathPaint);            p.setTextAlign(Paint.Align.CENTER);//在路径的中间            canvas.drawTextOnPath(TEXTONPATH, mPath, 0, 0, p);            canvas.translate(0, DY*1.5f);            canvas.drawPath(mPath, mPathPaint);            p.setTextAlign(Paint.Align.RIGHT);//在路径的右边            canvas.drawTextOnPath(TEXTONPATH, mPath, 0, 0, p);        }        @Override        protected void onSizeChanged(int w, int h, int ow, int oh) {            super.onSizeChanged(w, h, ow, oh);            mX = w * 0.5f;  // remember the center of the screen //居中显示        }    }}



/* *android 其实也可以自定义字体 通过paint就可以 */public class Typefaces extends GraphicsActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new SampleView(this));    }    private static class SampleView extends View {        private Paint    mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);        private Typeface mFace;        public SampleView(Context context) {            super(context);            mFace = Typeface.createFromAsset(getContext().getAssets(), "fonts/samplefont.ttf"); //也可以从sd卡等地方拿到字体显示            mPaint.setTextSize(64);        }        @Override protected void onDraw(Canvas canvas) {            canvas.drawColor(Color.WHITE);            mPaint.setTypeface(null);            canvas.drawText("Default", 10, 100, mPaint);            mPaint.setTypeface(mFace);            canvas.drawText("Custom", 10, 200, mPaint);        }    }}


//打印Unicode编码可以进行,左右按钮 变化mbase 来调整其他unicode值public class UnicodeChart extends GraphicsActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(new SampleView(this));    }    private static class SampleView extends View {        private Paint mBigCharPaint;        private Paint mLabelPaint;        private final char[] mChars = new char[256];        private final float[] mPos = new float[512];        private int mBase;        private static final int XMUL = 20;        private static final int YMUL = 28;        private static final int YBASE = 18;        public SampleView(Context context) {            super(context);            setFocusable(true);            setFocusableInTouchMode(true);            mBigCharPaint = new Paint(Paint.ANTI_ALIAS_FLAG);            mBigCharPaint.setTextSize(15);            mBigCharPaint.setTextAlign(Paint.Align.CENTER);            mLabelPaint = new Paint(Paint.ANTI_ALIAS_FLAG);            mLabelPaint.setTextSize(8);            mLabelPaint.setTextAlign(Paint.Align.CENTER);            // the position array is the same for all charts            float[] pos = mPos;            int index = 0;            for (int col = 0; col < 16; col++) {                final float x = col * XMUL + 10;                for (int row = 0; row < 16; row++) {                    pos[index++] = x;                    pos[index++] = row * YMUL + YBASE;                }            }        }        private float computeX(int index) {            return (index >> 4) * XMUL + 10;        }        private float computeY(int index) {            return (index & 0xF) * YMUL + YMUL;        }        private void drawChart(Canvas canvas, int base) {            char[] chars = mChars;            for (int i = 0; i < 256; i++) {                int unichar = base + i;                chars[i] = (char)unichar;//把每个整型值转为 char并输出                canvas.drawText(Integer.toHexString(unichar),                                computeX(i), computeY(i), mLabelPaint);            }            canvas.drawPosText(chars, 0, 256, mPos, mBigCharPaint);        }        @Override protected void onDraw(Canvas canvas) {            canvas.drawColor(Color.WHITE);            canvas.translate(0, 1);            drawChart(canvas, mBase * 256);        }        @Override public boolean onKeyDown(int keyCode, KeyEvent event) {            switch (keyCode) {                case KeyEvent.KEYCODE_DPAD_LEFT:                    if (mBase > 0) {                        mBase -= 1;                        invalidate();                    }                    return true;                case KeyEvent.KEYCODE_DPAD_RIGHT:                    mBase += 1;                    invalidate();                    return true;                default:                    break;            }            return super.onKeyDown(keyCode, event);        }    }}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 如果在大庭广众之下放了个屁怎么办 淘宝分销上传宝贝被系统下架怎么办 酷狗喜欢歌单里面的歌都没了怎么办 苹果手机下载不了微信缓冲怎么办 登陆微信提示版本过低登不了怎么办 苹果手机微信版本过低登不上怎么办 微信小程序显示微信版本过低怎么办 三星手机登微信显示版本过低怎么办 微信版本低无法登录无法升级怎么办 手机淘宝五应用界面无法打开怎么办 入住淘宝主播没有微博粉丝怎么办 手机淘宝领金币怎么没有了怎么办 淘宝荬家缺货对付款买家怎么办 淘宝买家确认收货后申请退款怎么办 淘宝东西失效了但付过款了怎么办 淘宝图片被投诉盗图怎么办原图没了 淘宝退款申请不小心撤销了怎么办 淘宝不小心点了撤销退款怎么办 淘宝上退款不小心撤销了怎么办 新店淘宝卖家想开通直播怎么办 想开通淘宝直播却没有粉丝怎么办 淘宝店家拒绝给我改地址怎么办0 淘宝被投诉卖假申诉失败怎么办 要退保证金但是有人买东西了怎么办 手机淘宝上我是商家停止服务怎么办 淘宝上买的电脑商家关闭了怎么办 淘宝链接复制链链接发不出去怎么办 淘宝卖家填错地址货已经发了怎么办 拼多多没交保证金无法提现怎么办 信用卡被别人刷了没证据怎么办 我在淘宝开个店卖衣服没人买怎么办 收货地址填错了卖家已发货怎么办 淘宝店上的供货商不发货怎么办 在淘宝买的花退到卖家后死了怎么办 在淘宝买东西付款开通了花呗怎么办 淘宝网投诉卖家也不处理问题怎么办 淘宝图片空间上传不了大图片怎么办 不小心把设置里打印机删掉了怎么办 电脑上qq不小心删掉了怎么办 进了一批款式不好卖的衣服怎么办? 淘宝首页图片不居中代码装的怎么办