首页 > 系统 > Android > 正文

android实现设置圆形图片(一)

2019-11-07 23:43:45
字体:
来源:转载
供稿:网友

(一)

  通过Xfermode方式,主要是把两张图片组合,由你决定是选取重叠部分还是非重叠部分,可以参考Android官方提供的图片

本文采用DstIn方式,首先画一个实心圆

//实心圆的宽高要与当前view的尺寸相同
PRivate Bitmap getCircleBitmap() {		if (mCircleBitmap == null) {			mCircleBitmap = Bitmap.createBitmap(2 * mRadius, 2 * mRadius,					Config.ARGB_8888);			Canvas canvas = new Canvas(mCircleBitmap);						mPaint.reset();			mPaint.setStyle(Style.FILL);			canvas.drawCircle(mRadius, mRadius, mRadius, mPaint);		}		return mCircleBitmap;	}然后将你画的圆盖到设置的图片上

private Bitmap combineBitmap(Drawable drawable, Bitmap maskBitmap) {		int mWidth = drawable.getIntrinsicWidth();		int mHeight = drawable.getIntrinsicHeight();		Bitmap bitmap = Bitmap.createBitmap(mWidth, mHeight, Config.ARGB_8888);		Canvas canvas = new Canvas(bitmap);		drawable.setBounds(0, 0, 2 * mRadius, 2 * mRadius);//将图片放缩到view的尺寸		drawable.draw(canvas);				mPaint.reset();		mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));//设置DST_IN方式		canvas.drawBitmap(maskBitmap, 0, 0, mPaint);		mPaint.setXfermode(null);		return bitmap;	}最后再将最终的Bitmap绘制到画板上面

@Override	protected void onDraw(Canvas canvas) {		// TODO Auto-generated method stub		Drawable dra=getDrawable();		Bitmap cilcleBitmap = getCircleBitmap();		Bitmap bitmap = combineBitmap(dra, cilcleBitmap);		//canvas.drawColor(Color.GREEN);		//canvas.drawColor(Color.GREEN);		canvas.drawBitmap(bitmap, 0, 0, mPaint);	}在布局中设置图片

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:orientation="vertical"    tools:context="com.example.testcicledrawable.MyImageView" ><RelativeLayout     android:layout_width="fill_parent"    android:layout_height="wrap_content">     <com.example.testcicledrawable.MyImageView        android:layout_width="80dp"        android:layout_height="80dp"        android:id="@+id/iv"        android:src="@drawable/pic"        android:layout_centerInParent="true" />     <TextView          android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_toLeftOf="@id/iv"         android:text="hehehhehehehhehehehehhehehehhehehhehehehehehhehehehehehheheheh"/>     <TextView android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="qianxiqianxiqianxiqianxiqianxiqianxiqianxiqianxiqianxi"         android:layout_toRightOf="@id/iv"/></RelativeLayout>   <TextView     android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"/></LinearLayout>最后根据你设置的图片大小设置当前画板的尺寸与图片相同

        private Paint mPaint;	private int mRadius;	private Bitmap mCircleBitmap;	public MyImageView(Context context) {	  super(context);	// TODO Auto-generated constructor stub	  mPaint=new Paint();	  mRadius=dip2px(context, 80f)/2;   }   public MyImageView(Context context, AttributeSet attrs) {		super(context, attrs);		// TODO Auto-generated constructor stub		mPaint=new Paint();		mRadius=dip2px(context, 80f)/2;	}	public MyImageView(Context context, AttributeSet attrs, int defStyle) {		super(context, attrs, defStyle);		// TODO Auto-generated constructor stub		mPaint=new Paint();		mRadius=dip2px(context, 80f)/2;	}			/**	 * 根据手机的分辨率从 dp 的单位 转成为 px(像素)	 */	public static int dip2px(Context context, float dpValue) {	 final float scale = context.getResources().getDisplayMetrics().density;	 return (int) (dpValue * scale + 0.5f);	}   在主activity里可以直接当imageview使用设置对应的要显示的图片,记得自定义的view要继承imageview,,最好压缩一下,图片太大占内存。

以上。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表