仿迅雷下载球

来源:互联网 发布:样本册软件 编辑:程序博客网 时间:2024/04/28 07:52

效果展示

这里写图片描述

package com.example.administrator.mydrawpath.widget;import android.content.Context;import android.graphics.Bitmap;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.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by Administrator on 2015/9/17. */public class MyPath extends View {    private int width;    private int height;    private Paint mPaintPath;    private Path mPath;    private int range=5;    private Paint mPaintPoint;    private Bitmap mBitmap;    private Paint mPaintText;//用于记录水高占圆直径的百分比    private int size;//通过size的改变来让“流水的高度上涨”    private int count;//通过count的改变实现贝塞尔曲线的移动,以达到流动的效果    private static final int NEED_UPDATA = 0X22;    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what) {                case NEED_UPDATA:                    if (count < 80) {                        count += 5;                    } else {                        count = 0;                    }                    if (size < 300) {                        size++;                    }                    invalidate();                    handler.sendEmptyMessageDelayed(NEED_UPDATA, 100);                    break;            }        }    };    public MyPath(Context context) {        super(context);    }    public MyPath(Context context, AttributeSet attrs) {        super(context, attrs);        mPaintPath = new Paint();        mPaintPath.setColor(Color.BLUE);        mPaintPath.setAntiAlias(true);        mPaintPath.setStyle(Paint.Style.FILL);        mPaintPath.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));//设置重叠方式        mPath = new Path();        mPaintPoint = new Paint();        mPaintPoint.setColor(Color.RED);        mPaintPoint.setStyle(Paint.Style.FILL);        mPaintText = new Paint();        mPaintText.setColor(Color.WHITE);        mPaintText.setTextSize(50);        mPaintText.setTextAlign(Paint.Align.CENTER);        handler.sendEmptyMessage(NEED_UPDATA);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);        height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);        setMeasuredDimension(width, height);        mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);        mCanvas = new Canvas(mBitmap);    }    private Canvas mCanvas;    float x;    float y;    @Override    public boolean onTouchEvent(MotionEvent event) {        switch (event.getAction()){            case MotionEvent.ACTION_MOVE:            case MotionEvent.ACTION_DOWN:                x=event.getX();                y=event.getY();                if(200<x&&x<400&&y>200&&y<400){                 range=15;//按下或移动时将水波的幅度变大                }                invalidate();                return true;            case MotionEvent.ACTION_UP:                range=5;//抬起时回复正常幅度                return true;        }        return super.onTouchEvent(event);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);//        mPath.moveTo(100,100);        canvas.drawColor(Color.GREEN);//设置画布的背景色        mPath.reset();        //用以下方法画一个上段是移动的贝塞尔曲线的长方形        mPath.moveTo(500, 450 - size);        mPath.lineTo(500, 500);        mPath.lineTo(count, 500);        mPath.lineTo(count, 450 - size);        for (int i = 0; i < 20; i++) {            mPath.rQuadTo(20, range, 40, 0);            mPath.rQuadTo(20, -range, 40, 0);        }        mPath.close();        mCanvas.drawCircle(300, 300, 150, mPaintPoint);//在Bitmap上画一个圆形外框        mCanvas.drawPath(mPath, mPaintPath);//在Bitmap上画上路径        mCanvas.drawText((float) (Math.round(size * 100 / 3f)) / 100 + "%", 300, 300, mPaintText);        canvas.drawBitmap(mBitmap, 0, 0, null);//将bitmap画到画布上/** * Canvas基本画图 * */        /*画三角形*///        mPath.lineTo(0,200);//        mPath.lineTo(200,200);//        mPath.close();         /*画圆形,并在在圆形路径上写字*///        mPath.addCircle(width/2,height/2,200, Path.Direction.CW);//        canvas.drawTextOnPath("写一写而已",mPath,0,0,mPaintPath);//        canvas.drawPath(mPath,mPaintPath);        /*贝塞尔曲线*///        mPath.quadTo(100,400,300,300);//        canvas.drawPath(mPath,mPaintPath);//        canvas.drawPoint(100,100,mPaintPoint);//        canvas.drawPoint(100,400,mPaintPoint);//        canvas.drawPoint(300,300,mPaintPoint);        /*画波浪线*/    }}
0 0
原创粉丝点击