Ven*_*r85 12 android android-canvas
我正在尝试实现一个使用圆角绘制自己的LinearLayout子类.根据我的研究,我设置setWillNotDraw(false)并覆盖onDraw()在画布上绘制一个圆角矩形:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), drawPaint, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
| Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
canvas.drawRoundRect(bounds, mCornerRadius, mCornerRadius, roundPaint);
canvas.restoreToCount(sc);
}
Run Code Online (Sandbox Code Playgroud)
哪里:
drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
drawPaint.setColor(0xffffffff);
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
roundPaint.setColor(0xffffffff);
Run Code Online (Sandbox Code Playgroud)
DST_IN这里似乎是正确的选择(根据APIDemos示例),但应该是透明的区域(圆形的)具有黑色背景,并且子项的角仍然可见.这是使用Android 4.2.2的Galaxy Nexus的结果:

任何提示?
编辑:这是我想要实现的,抱歉photoshopping的粗糙:)

编辑2:我向GitHub添加了一个可运行的示例项目:https://github.com/venator85/RoundClippingLayout
谢谢 ;)
不太一样:Romain Guy做了一篇关于使用位图着色器裁剪图像边角的博文.不确定是否要扩展同样的东西.
http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/
试试这个,
布局:-
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="300dp"
android:gravity="center"
android:layout_height="300dp"
android:layout_centerInParent="true"
android:background="@drawable/rounded_edge">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="foo" />
</LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
形状(可绘制): - rounded_edge.xml
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<solid
android:color="@android:color/darker_gray">
</solid>
<stroke
android:width="0dp"
android:color="#424242">
</stroke>
<corners
android:topLeftRadius="100dip"
android:topRightRadius="100dip"
android:bottomLeftRadius="100dip"
android:bottomRightRadius="100dip">
</corners>
</shape>
Run Code Online (Sandbox Code Playgroud)
怎么样...
myLayout.setBackgroundResource(R.drawable.my_rounded_drawable);
Run Code Online (Sandbox Code Playgroud)
然后...
my_rounded_drawable.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#FFFFFFFF" />
<stroke android:width="1dip" android:color="#FF000000" />
<corners android:radius="10dp" />
</shape>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28036 次 |
| 最近记录: |