
每個主播頭像正好裁剪壓縮顯示在中間,第二四個角都是圓角。所以從以上三點出發我們只能重寫imageview
方法一:BitmapShader方式
Shader 這個英文單詞很多人沒有見過,它的中文叫做「著色器」,也是用于設置繪制顏色的。「著色器」不是 Android 獨有的,它是圖形領域里一個通用的概念,它和直接設置顏色的區別是,著色器設置的是一個顏色方案,或者說是一套著色規則。當設置了 Shader 之后,Paint 在繪制圖形和文字時就不使用 setColor/ARGB() 設置的顏色了,而是使用 Shader 的方案中的顏色。Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.batman); Shader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
paint.setShader(shader);
canvas.drawCircle(300, 300, 200, paint);

Path path = new Path();
path.moveTo(100, 0);// 此點為多邊形的起點
path.lineTo(200 - 12, 0);
path.quadTo(200, 0, 200, 12);
path.lineTo(200, 300 - 12);
path.quadTo(200, 300, 200 - 12, 300);
path.lineTo(0, 300);
path.close();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.batman); Shader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
paint.setShader(shader);
canvas.drawPath(path,paint);
方法二:ClipPath方式
ClipPath是Canvas提供對畫布裁剪的方法之一畫布裁剪后后面的Canvas操作,都會在對裁剪后的畫布進行操作public class MyImageView02 extends android.support.v7.widget.AppCompatImageView {
public MyImageView02(Context context) {
super(context);
}
public MyImageView02(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyImageView02(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(getResources().getColor(R.color.transparent));
Path path = new Path();
path.moveTo(100, 0);// 此點為多邊形的起點
path.lineTo(200 - 12, 0);
path.quadTo(200, 0, 200, 12);
path.lineTo(200, 300 - 12);
path.quadTo(200, 300, 200 - 12, 300);
path.lineTo(0, 300);
path.close(); // 使這些點構成封閉的多邊形
canvas.drawPaint(paint);
canvas.clipPath(path);
super.onDraw(canvas);
}
}
最后我們只需要布局用Relativelayout 做兩個自定義imageview的相對布局就可以了,代碼都是寫死了,實際需要計算寬高
<RelativeLayout
android:layout_width="154dp"
android:layout_height="150dp"
android:orientation="horizontal">
<com.hencoder.hencoderpracticedraw2.sample.MyImageView
android:id="@+id/myimage"
android:layout_width="100dp"
android:layout_height="150dp"
android:layout_alignParentLeft="true"
android:scaleType="centerCrop"
android:src="@drawable/batman" />
<com.hencoder.hencoderpracticedraw2.sample.MyImageView02
android:id="@+id/myimage02"
android:layout_width="100dp"
android:layout_height="150dp"
android:layout_alignParentRight="true"
android:scaleType="centerCrop"
android:src="@drawable/guide_3" />
<ProgressBar
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="10dp"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:max="100"
android:progress="50"
android:progressDrawable="@drawable/progressbar_drawable" />
</RelativeLayout>
以上兩個方法都可以,但是更推薦方法二,不用對drawable進行修改。
發表評論 取消回復