当前位置:操作系统 > 安卓/Android >>

android自定义一圆角ImageView

[java] view plaincopy
 
[java] 
java类如下: 
[java]
 
[java]
import android.content.Context; 
import android.content.res.TypedArray; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.PorterDuff; 
import android.graphics.PorterDuffXfermode; 
import android.graphics.RectF; 
import android.util.AttributeSet; 
import android.widget.ImageView; 
import cn.dotcreate.tt.R; 
 
public class RoundAngleImageView extends ImageView { 
 
    private Paint paint; 
    private int roundWidth = 5; 
    private int roundHeight = 5; 
    private Paint paint2; 
 
    public RoundAngleImageView(Context context, AttributeSet attrs, int defStyle) { 
        super(context, attrs, defStyle); 
        init(context, attrs); 
    } 
 
    public RoundAngleImageView(Context context, AttributeSet attrs) { 
        super(context, attrs); 
        init(context, attrs); 
    } 
 
    public RoundAngleImageView(Context context) { 
        super(context); 
        init(context, null); 
    } 
     
    private void init(Context context, AttributeSet attrs) { 
         
        if(attrs != null) {    
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundAngleImageView);  
            roundWidth= a.getDimensionPixelSize(R.styleable.RoundAngleImageView_roundWidth, roundWidth); 
            roundHeight= a.getDimensionPixelSize(R.styleable.RoundAngleImageView_roundHeight, roundHeight); 
        }else { 
            float density = context.getResources().getDisplayMetrics().density; 
            roundWidth = (int) (roundWidth*density); 
            roundHeight = (int) (roundHeight*density); 
        }  
         
        paint = new Paint(); 
        paint.setColor(Color.WHITE); 
        paint.setAntiAlias(true); 
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); 
         
        paint2 = new Paint(); 
        paint2.setXfermode(null); 
    } 
     
    @Override 
    public void draw(Canvas canvas) { 
        Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888); 
        Canvas canvas2 = new Canvas(bitmap); 
        super.draw(canvas2); 
        drawLiftUp(canvas2); 
        drawRightUp(canvas2); 
        drawLiftDown(canvas2); 
        drawRightDown(canvas2); 
        canvas.drawBitmap(bitmap, 0, 0, paint2); 
        bitmap.recycle(); 
    } 
     
    private void drawLiftUp(Canvas canvas) { 
        Path path = new Path(); 
        path.moveTo(0, roundHeight); 
        path.lineTo(0, 0); 
        path.lineTo(roundWidth, 0); 
        path.arcTo(new RectF( 
                0,  
                0,  
                roundWidth*2,  
                roundHeight*2),  
                -90,  
                -90); 
        path.close(); 
        canvas.drawPath(path, paint); 
    } 
     
    private void drawLiftDown(Canvas canvas) { 
        Path path = new Path(); 
        path.moveTo(0, getHeight()-roundHeight); 
        path.lineTo(0, getHeight()); 
        path.lineTo(roundWidth, getHeight()); 
        path.arcTo(new RectF( 
                0,  
                getHeight()-roundHeight*2,  
                0+roundWidth*2,  
                getWidth()),  
                90,  
                90); 
        path.close(); 
        canvas.drawPath(path, paint); 
    } 
     
    private void drawRightDown(Canvas canvas) { 
        Path path = new Path(); 
        path.moveTo(ge

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,