我遇到了剪辑问题。
首先,我尝试仅使用 Xml 显示椭圆形。我有以下代码:
res/drawable/circle.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<size
android:width="240dp"
android:height="240dp" />
<solid
android:color="#FFFFFF" />
<stroke
android:width="2dp"
android:color="#EEEEEE" />
</shape>
*res/layout/test.xml
....
<RelativeLayout
android:id="@+id/circle_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
<ImageView
android:src="@drawable/circle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
....
它完美地工作,并给了我这个:截图
问题是,由于各种原因,我必须在程序上做同样的事情。
我有这个代码:
RelativeLayout layout = (RelativeLayout) findViewById(R.id.circle_layout);
ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
drawable.getPaint().setColor(Color.parseColor("#EEEEEE"));
drawable.getPaint().setStyle(Style.STROKE);
drawable.getPaint().setStrokeWidth(dpToPx(2));
drawable.getPaint().setAntiAlias(true);
drawable.setIntrinsicHeight(dpToPx(240));
drawable.setIntrinsicWidth(dpToPx(240));
ImageView iv = new ImageView(this);
iv.setImageDrawable(drawable);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
iv.setLayoutParams(lp);
layout.addView(iv);
dpToPx 函数是:
private float scale = 0;
private float getScale() {
if (scale == 0)
scale = this.getResources().getDisplayMetrics().densityDpi / 160f;
return scale;
}
public float dpToPx(float dp) {
return dp * getScale();
}
...这应该给我同样的东西吧?好吧,它给出了一个稍大的圆圈,顶部,右侧,底部和左侧边缘被剪裁。这是一个屏幕截图(屏幕区域与上一个屏幕相同):Screehshot
有人知道什么和为什么?
谢谢你。
编辑:
如果我将描边宽度设置为更高的值(12dp),我得到了这个:截图