仿迅雷下载球
16lz
2021-01-26
效果展示
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(200400&&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); /*画波浪线*/ }}
更多相关文章
- Android中View,SurfaceView和GLSurfaceView绘图的区别
- 【Android】View类详解 (游戏开发必备)
- Android(安卓)自定义控件一 带圆形进度的按钮 ControlButton2
- 自定义圆形ProgressBar
- Android圆形图片控件RoundedImageView
- Android中SurfaceView的使用
- Android(安卓)L 沉浸式状态栏和圆形动画实现炫酷效果
- Android(安卓)自定义签字板
- bitmap与canvas android