zoukankan      html  css  js  c++  java
  • 圆头像控件,自动监听点击跳转到Activity

    1、MaskedImage.java

    (1)继承自volley的NetworkImageView,方便从网络获取

    (2)实现OnClickListener,统一处理头像的点击事件,跳转到用户信息,但别忘了

    setOnClickListener(this);

    (3)成员变量account,保存该用户的ID

    package com.example.widget;
    
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.graphics.PorterDuff;
    import android.graphics.PorterDuffXfermode;
    import android.graphics.RectF;
    import android.graphics.Xfermode;
    import android.graphics.drawable.Drawable;
    import android.util.AttributeSet;
    import android.view.View;
    import android.view.View.OnClickListener;
    
    import com.android.volley.toolbox.NetworkImageView;
    import com.will.main.OtherPersonalActivity;
    
    public class MaskedImage extends NetworkImageView implements OnClickListener{
        private String account;
        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 Bitmap createMask() {
            int i = getWidth();
            int j = getHeight();
            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;
        };
    
        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 = ");
            }
        }
    
        @Override
        public void onClick(View arg0) {
            Intent intent=new Intent(getContext(),OtherPersonalActivity.class);
            // TODO Auto-generated method stub
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra("account", account);
            getContext().startActivity(intent);
        }
    
        public String getAccount() {
            return account;
        }
    
        public void setAccount(String account) {
            this.account = account;
            setOnClickListener(this);
        }
    }

    PorterDuff.Mode为枚举类,一共有16个枚举值,上面取值7.PorterDuff.Mode.DST_IN

    1.PorterDuff.Mode.CLEAR 

      所绘制不会提交到画布上。
    2.PorterDuff.Mode.SRC

       显示上层绘制图片
    3.PorterDuff.Mode.DST

      显示下层绘制图片
    4.PorterDuff.Mode.SRC_OVER

      正常绘制显示,上下层绘制叠盖。
    5.PorterDuff.Mode.DST_OVER

      上下层都显示。下层居上显示。
    6.PorterDuff.Mode.SRC_IN

       取两层绘制交集。显示上层。
    7.PorterDuff.Mode.DST_IN

      取两层绘制交集。显示下层。
    8.PorterDuff.Mode.SRC_OUT

     取上层绘制非交集部分。
    9.PorterDuff.Mode.DST_OUT

     取下层绘制非交集部分。
    10.PorterDuff.Mode.SRC_ATOP

     取下层非交集部分与上层交集部分
    11.PorterDuff.Mode.DST_ATOP

     取上层非交集部分与下层交集部分
    12.PorterDuff.Mode.XOR

      异或:去除两图层交集部分
    13.PorterDuff.Mode.DARKEN

      取两图层全部区域,交集部分颜色加深
    14.PorterDuff.Mode.LIGHTEN

      取两图层全部,点亮交集部分颜色
    15.PorterDuff.Mode.MULTIPLY

      取两图层交集部分叠加后颜色
    16.PorterDuff.Mode.SCREEN

      取两图层全部区域,交集部分变为透明色

    Done!

  • 相关阅读:
    Java8 lambda表达式语法 1
    Spring WebMVC 4.1返回json时 406(Not Acceptable)
    上传 第三方jar包 nexus
    Nexus 使用配置
    Nexus 安装 使用说明
    mysql 常用命令
    JedisPoolConfig配置
    tomcat 管理端 安全措施
    Java ReentrantLock和synchronized两种锁定机制的对比
    spring 在web容器启动时执行初始化方法
  • 原文地址:https://www.cnblogs.com/xingyyy/p/5226146.html
Copyright © 2011-2022 走看看