【问题标题】:How to draw text inside custom view?如何在自定义视图中绘制文本?
【发布时间】:2016-10-09 14:40:23
【问题描述】:

我创建了自定义视图以在内部绘制自定义对话气泡 我想在自定义视图上放一些文字。我使用 drawTextOnPath 但它不能正常工作,我希望文本逐行显示。

自定义视图 - 语音气泡

Paint paint = new Paint();

paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
paint.setStrokeWidth(2);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);      
paint.setPathEffect(new CornerPathEffect(15) );  
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setDither(true);
paint.setShader(new LinearGradient(0, 0, 0, getHeight(), Color.BLACK, Color.WHITE,
                                                           Shader.TileMode.MIRROR));
Path path = new Path();         
paint.setShadowLayer(4, 2, 2, 0x80000000);
path.moveTo(myPath[0].x, myPath[0].y);
for (int i = 1; i < myPath.length; i++){
    path.lineTo(myPath[i].x, myPath[i].y);                  
}
path.close();
canvas.clipPath(path);
canvas.drawPath(path, paint);
canvas.save();
paint = new Paint();
paint.setColor(Color.WHITE);
canvas.drawTextOnPath(MessageBody, path, 10, 10, paint);

谢谢。

【问题讨论】:

    标签: android android-layout android-view


    【解决方案1】:

    这样的?

    Paint paint = new Paint();
    paint.setColor(Color.WHITE);
    paint.setStyle(Style.FILL);
    canvas.drawPaint(paint);
    ...
    //tell the paint of the new color
    paint.setColor(android.R.color.black);
    paint.setTextSize(20);
    canvas.drawText("Some Text", 10, 25, paint);
    

    编辑:

    那为什么不这样呢

    Path path = new Path();
    path.addCircle(width/2, height/2, radius, Path.Direction.CW);
    
    Paint paint = new Paint();
    paint.setColor(Color.WHITE);
    paint.setTextSize(20);
    canvas.drawTextOnPath("Some Text", path, 0, 0, paint);
    

    编辑 nr2:

    为什么不添加一个矩形?

    path.addRect(left, top, right, bottom, Direction.CW);
    

    path.addRect(rect, Direction.CW);
    

    【讨论】:

    • 否,如果文本大于视图大小,所有文本都不会显示在视图内
    • 这里的rect是什么? canvas.drawTextOnPath(MessageBody, rect, 10, 10, paint);
    • 它是画圆,我的自定义视图像矩形
    • 是的,它只是一个 poc :) 你的路径可能有错误你尝试调试吗?
    • 是的,它可以画出对话泡泡,但我不能在里面画文字。我在我的路径上画了一个矩形,但它没有用!
    【解决方案2】:

    我像这样在对话泡泡中创建了一个矩形

    Rect rcText;
    rcText = new Rect(rcBounds);//rcBounds is y speech bubble rect
    canvas.save();
    

    限制绘制区域

    canvas.cliprect(rect);

    并像这样在对话气泡内绘制文本

    canvas.drawtext(mytext,rect.left,rect.top,paint);
    canvas.restore();
    

    感谢 mc_fish。

    【讨论】:

    • 如果一个解决方案对您有用,而不是编写您自己的答案并接受它,而是接受对您有帮助的答案并评论该答案如果您做了比提供的额外工作,您究竟做了什么答案。奖励帮助过你的人(在本例中为 mc_fish)。
    • 我不记得我为什么写新答案并接受它,但我认为你可能是对的,我当时支持 mc_fish 答案。感谢您将我指向此@EmilS。
    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多