GradientDrawable的setStroke

时间:2016-11-02 09:00:42

标签: android android-drawable

这是我第一次在stackoverflow中提问,现在我对GradientDrawable的笔画宽度感到困惑,当我使用代码将TextView背景设置为如下

    GradientDrawable gd = new GradientDrawable();
    gd.setShape(GradientDrawable.RECTANGLE);
    gd.setColor(fillColor);
    gd.setCornerRadius(roundRadius); 
    int strokeColor = Color.parseColor(getColor(Subject.list.get(0).color));
            gd.setStroke(strokeWidth, strokeColor);
            tvSpecial1Title.setText(Subject.list.get(0).title);
            tvSpecial1Title.setTextColor(strokeColor);
            tvSpecial1Title.setBackgroundDrawable(gd);
            tvSpecial1Intro.setText(Subject.list.get(0).intro);

此方法的结果是TextView的笔触宽度比使用XML更细,XML定义如下

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00ffffff" />
    <stroke
        android:width="0.5dp"
        android:color="#ff8200" />
    <corners android:radius="2dp" />
    <padding
        android:bottom="1dp"
        android:left="3dp"
        android:right="3dp"
        android:top="1dp" />


</shape>

使用XML如下

TextView t = new TextView(getContext());
t.setBackgroundResource(R.drawable.plugin_movie_item_icon_orange_selector);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    params.rightMargin = CommonUtils.dip2px(5);
    t.setLayoutParams(params);
    t.setGravity(Gravity.CENTER);
    t.setIncludeFontPadding(false);
    t.setSingleLine();
    t.setTextColor(Color.parseColor("#ff8200"));
    t.setTextSize(10);`

这两种设置笔画宽度的方法在视觉上导致了不同的图像,前者的笔画宽度比后者更薄,有没有人帮助解决这个问题,更加衷心的感谢你。

1 个答案:

答案 0 :(得分:1)

applyDemensions方法换入Math.round()

Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, strokeWidth, getResources().getDisplayMetrics()));