自定义圆图片(2)
来源:互联网 发布:mac字体大小 编辑:程序博客网 时间:2024/05/18 16:38
第一步首先自定义一个类继承ImageView
import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Xfermode;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.ImageView;public abstract class MaskedImage extends ImageView { private static final Xfermode MASK_XFERMODE; private Bitmap mask; private Paint paint; static { PorterDuff.Mode localMode = PorterDuff.Mode.DST_IN; MASK_XFERMODE = new PorterDuffXfermode(localMode); } public MaskedImage(Context paramContext) { super(paramContext); } public MaskedImage(Context paramContext, AttributeSet paramAttributeSet) { super(paramContext, paramAttributeSet); } public MaskedImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) { super(paramContext, paramAttributeSet, paramInt); } public abstract Bitmap createMask(); protected void onDraw(Canvas paramCanvas) { Drawable localDrawable = getDrawable(); if (localDrawable == null) return; try { if (this.paint == null) { Paint localPaint1 = new Paint(); this.paint = localPaint1; this.paint.setFilterBitmap(false); Paint localPaint2 = this.paint; Xfermode localXfermode1 = MASK_XFERMODE; @SuppressWarnings("unused") Xfermode localXfermode2 = localPaint2.setXfermode(localXfermode1); } float f1 = getWidth(); float f2 = getHeight(); int i = paramCanvas.saveLayer(0.0F, 0.0F, f1, f2, null, 31); int j = getWidth(); int k = getHeight(); localDrawable.setBounds(0, 0, j, k); localDrawable.draw(paramCanvas); if ((this.mask == null) || (this.mask.isRecycled())) { Bitmap localBitmap1 = createMask(); this.mask = localBitmap1; } Bitmap localBitmap2 = this.mask; Paint localPaint3 = this.paint; paramCanvas.drawBitmap(localBitmap2, 0.0F, 0.0F, localPaint3); paramCanvas.restoreToCount(i); return; } catch (Exception localException) { StringBuilder localStringBuilder = new StringBuilder() .append("Attempting to draw with recycled bitmap. View ID = "); System.out.println("localStringBuilder=="+localStringBuilder); } } }
第二步 再定义一个类继承上面的MaskedImage实现绘制自定义图片
import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;public class CircularImage extends MaskedImage { public CircularImage(Context paramContext) { super(paramContext); } public CircularImage(Context paramContext, AttributeSet paramAttributeSet) { super(paramContext, paramAttributeSet); } public CircularImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) { super(paramContext, paramAttributeSet, paramInt); } public Bitmap createMask() { int i = getWidth(); //宽度 int j = getHeight(); //高度 //图片配合 Bitmap.Config.ARGB_8888这个是颜色设置a代表的是Alpha rgb是RED GREEN BLUE三原色 Bitmap.Config localConfig = Bitmap.Config.ARGB_8888; Bitmap localBitmap = Bitmap.createBitmap(i, j, localConfig); Canvas localCanvas = new Canvas(localBitmap); Paint localPaint = new Paint(1); localPaint.setColor(-16777216); float f1 = getWidth(); float f2 = getHeight(); RectF localRectF = new RectF(0.0f, 0.0f, f1, f2); localCanvas.drawOval(localRectF, localPaint); return localBitmap; } }
第三步在布局中引入自定义的类
<RelativeLayout 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" tools:context=".MainActivity" > <ImageView android:layout_width="82.0dip" android:layout_height="82.0dip" android:layout_centerInParent="true" android:contentDescription="@null" android:background="@drawable/me_head_bg" /> <com.example.head.CircularImage android:id="@+id/cover_user_photo" android:layout_width="74.0dip" android:layout_height="74.0dip" android:layout_centerInParent="true" /> </RelativeLayout>
//在主类中为自定义图片赋值
import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //控件获得id CircularImage cover_user_photo = (CircularImage) findViewById(R.id.cover_user_photo); //为控件设置背景图片 cover_user_photo.setImageResource(R.drawable.face); } }
运行的效果图:
0 0
- 自定义圆图片(2)
- 自定义圆图片
- 自定义圆图片
- 自定义圆角矩形图片/圆形图片
- Android 自定义圆角图片
- 自定义图片圆角背景
- 自定义Toast(显示图片)
- 异步下载图片(自定义)
- 自定义button(标题+ 图片)
- 自定义圆形图片(RoundImageView)
- 自定义圆形图片、圆角图片,椭圆图片
- 自定义图片
- 自定义View(1)--圆形图片、圆角图片的实现
- 自定义圆角图片、圆形图片(适用于显示用户图标)
- Android自定义View学习之圆角图片(圆形图片)
- android 自定义图片合集(自定义控件)
- 自定义RelativeLayout 实现图片圆角背景
- 自定义View之圆角图片
- Opengl备忘5----变换
- 字典操作复习
- Template小结
- 广东工业大学网络赛E题 思维题
- 湖南省选Day2
- 自定义圆图片(2)
- ZOJ 1755
- jxl(Java Excel API) 使用方法 【1】
- vs2013配置opencv2.4.11
- JAVA——继承相关
- Jade的mixin用法
- HNOI 2016游记
- Base64编码和解码字符串
- 【LeetCode-103】Binary Tree Zigzag Level Order Traversal