【问题标题】:Android Programmatically StrokeAndroid 以编程方式描边
【发布时间】:2012-05-30 22:00:22
【问题描述】:

我想在 Android 中的文本上画一个黑色的描边。

我看过这个例子: How do you draw text with a border on a MapView in Android?

解决方案覆盖 onDraw() 以创建笔画。

问题是,我还是比较刚开始使用 Android,我不知道如何过渡到使用该解决方案。

在我的 onCreate 中,我设置了文本字体(它是自定义的):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeatures();

    // Set content view and component listeners
    setContentView(R.layout.meme_maker);
    setListeners();

    context = this;

    Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Impact.ttf");
    TextView mmt = (TextView) findViewById(R.id.meme_maker_title);
    TextView ttc = (TextView) findViewById(R.id.top_text_canvas);
    TextView tbc = (TextView) findViewById(R.id.bottom_text_canvas);

    ttc.setTypeface(tf);
    tbc.setTypeface(tf);
    mmt.setTypeface(tf);
}

我有一个 onClickListener,我可以在其中更改 TextView 的文本内容,基于用户在 TextEntry 中编写他/她想要的文本并随后单击按钮。

ImageView ii = (ImageView) findViewById(R.id.insert_image);
    ii.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EditText tt = (EditText) findViewById(R.id.top_text_text);
            EditText bt = (EditText) findViewById(R.id.bottom_text_text);

            TextView ttc = (TextView) findViewById(R.id.top_text_canvas);
            TextView btc = (TextView) findViewById(R.id.bottom_text_canvas);

            ttc.setText(tt.getText().toString().toUpperCase());
            btc.setText(bt.getText().toString().toUpperCase());
        }
    });

到目前为止,它非常简单。我的问题是:如何插入文本的笔画?在哪里?我需要创建 Canvas 和 Paint 对象吗?

【问题讨论】:

    标签: android android-canvas textview


    【解决方案1】:

    为 TextView 中呈现的文本获取阴影的最简单方法是设置样式,如 this answer 中所述。这需要很少的工作,听起来它在您的情况下可以正常工作。

    使用您链接到的技术涉及扩展现有 View 类、覆盖 onDraw() 以及在传递给 onDraw() 的画布上使用 Canvas.drawText() 来自己呈现文本。在某些情况下,这可能正是您所需要的,但对于您当前的情况来说,这听起来有点矫枉过正。如果您想进一步研究,the Android dev guide on the subject 是一本不错的读物。

    【讨论】:

    • 这就是我想要的。边界阴影不够,因为它不够暗。因此我需要一个中风,我看到了覆盖 onDraw 的例子。但是我不知道怎么用。通过阅读您的评论,我现在知道我需要创建一个自定义视图。就是这样。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多