package com.sandro.custom.view; import java.io.InputStream; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Region; import android.graphics.Typeface; import android.graphics.Bitmap.Config; import android.graphics.Paint.Align; import android.util.AttributeSet; import android.view.View; import com.sandro.ImageTrans.R; import com.sandro.util.CartonEngine.CartonCallBackLisener; /** * * @author sandro * */ public class VirusView extends View implements CartonCallBackLisener{ private Bitmap scanser; private Paint paint; public VirusView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } public VirusView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public VirusView(Context context) { super(context); init(context); } private void init(Context context){ InputStream is = context.getResources().openRawResource(R.drawable.icon_result_find_virus); Bitmap temp = BitmapFactory.decodeStream(is); scanser = Bitmap.createBitmap(temp.getWidth(), temp.getHeight(), Config.ARGB_4444); for(int i = 0;i<temp.getWidth();i++){ for(int j = 0;j<temp.getHeight();j++){ int color = temp.getPixel(i, j); scanser.setPixel(i, j, color); } } // for(int i = temp.getWidth()/4;i<3*temp.getWidth()/4;i++){ // for(int j = temp.getHeight()/4;j<3*temp.getHeight()/4;j++){ // scanser.setPixel(i, j,0x00000000); // } // } int centerx = scanser.getWidth()>>1; int centery = scanser.getHeight()>>1; int r2 = 2500; for(int i = 0;i<temp.getWidth();i++){ for(int j = 0;j<temp.getHeight();j++){ int x2 = (centerx - i)*(centerx - i); int y2 = (centery - j)*(centery - j); if (r2>x2+y2){ scanser.setPixel(i, j,0x00000000); } } } paint = new Paint(); paint.setStyle(Paint.Style.FILL); } private Path mPath = new Path(); @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // canvas.drawBitmap(scanser, // (this.getWidth() - scanser.getWidth())/2 , // (this.getHeight() - scanser.getHeight())/2, // null); int y = this.getHeight()>>1; Paint textPaint =new Paint( Paint.ANTI_ALIAS_FLAG); textPaint.setTextSize(30); textPaint.setColor(Color.RED); textPaint.setTypeface(Typeface.DEFAULT); textPaint.setTextAlign(Align.CENTER); canvas.save(); canvas.translate(0, 0);//canvas移动到当前view的 x,y位置 mPath.reset(); canvas.clipPath(mPath); // 清空path mPath.addCircle(this.getWidth()>>1, y, 200, Path.Direction.CW); mPath.addCircle(this.getWidth()>>1, y, 50, Path.Direction.CCW); canvas.clipPath(mPath, Region.Op.REPLACE); y -= 250; for(int i = 0;i<20;i++){ canvas.drawText("1010110011101011010110011101010101011011010110011001", this.getWidth()>>1, y, textPaint); y+=30; } canvas.restore(); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override public int getCircleMultiple() { return 1; } @Override public boolean isPause() { return false; } @Override public void onTime() { } }