游走型进度条(桌面360)

来源:互联网 发布:金山数据大师破解版 编辑:程序博客网 时间:2024/06/15 09:11

进度条显示

主程序

package com.test.mypathview;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {    private static final int PROGRESS=0X56;    private Button mButton;    private MyPath mMyRecProgress;    private int mProgress;    private Handler mHandler=new Handler(){        public void handleMessage(android.os.Message msg) {            switch (msg.what) {            case PROGRESS:                mProgress++;                if(mProgress<=100){                    mMyRecProgress.setmProgress(mProgress);                    mHandler.sendEmptyMessageDelayed(PROGRESS, 200);                }                break;            default:                break;            }        };    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //得到继承View的组件        mMyRecProgress= (MyPath) findViewById(R.id.progress);        mButton=(Button) findViewById(R.id.button);        mButton.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.button:            mHandler.sendEmptyMessageDelayed(PROGRESS, 1000);            break;        default:            break;        }    }}

继承View的程序

package com.test.mypathview;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Align;import android.graphics.Path;import android.graphics.Path.Direction;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.view.View;public class MyPath extends View {    private int mProgress;    public int getmProgress() {        return mProgress;    }    public void setmProgress(int mProgress) {        this.mProgress = mProgress;        invalidate();    }    private Paint mPaintText;    private Bitmap mBitmap;    private Canvas mBitmapCanvas;    private int mHeight;    private int mWidth;    private Path mPath;    private Paint mPaint;    private Paint mPaintPoint;    private int count;    private int mSize;    private boolean isAdd=true;    private static final int MESS=4;    private Handler mHandler=new Handler(){        public void handleMessage(Message msg) {            switch (msg.what) {            case MESS:                if(count<150){                    count+=5;                    invalidate();                }else{                    count=0;                    invalidate();                }                mHandler.sendEmptyMessageDelayed(MESS, 50);                break;            default:                break;            }        };    };    public MyPath(Context context, AttributeSet attrs) {        super(context, attrs);        //设置画百分比的画笔        mPaintText=new Paint();        mPaintText.setTextSize(50);        mPaintText.setTextAlign(Align.CENTER);        //设置填充进度的画笔        mPaint=new Paint();        mPaint.setStyle(Paint.Style.FILL);        mPaint.setAntiAlias(true);        mPaint.setTextSize(50);        mPaint.setColor(Color.GREEN);        //设置只显示重叠的部分        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));        //设置外面轮廓的画笔        mPaintPoint=new Paint();        mPaintPoint.setStrokeWidth(2);        mPaintPoint.setStyle(Paint.Style.FILL);        mPaintPoint.setColor(Color.RED);        mPath=new Path();        //设置启动线程        mHandler.sendEmptyMessageDelayed(MESS, 2000);    }    public MyPath(Context context) {        super(context);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        mWidth=getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);        mHeight=getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);        //在屏幕上创建一个画板        mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);        mBitmapCanvas = new Canvas(mBitmap);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);           //画外面的圆形            mBitmapCanvas.drawCircle(300, 300,150,  mPaintPoint);               mPath.reset();        //用锯齿线去画一个矩形,然后填充满矩形        mPath.moveTo(500, 450-mProgress*3);        mPath.lineTo(500, 500);        mPath.lineTo(count, 500);        mPath.lineTo(count, 450-mProgress*3);        for(int i=0;i<10;i++){        mPath.rQuadTo(20, 8, 40, 0);        mPath.rQuadTo(20, -8, 40, 0);        }        mPath.close();                  mBitmapCanvas.drawPath(mPath,mPaint);        canvas.drawBitmap(mBitmap, 0,0, null);        canvas.drawText(mProgress+"%", 300, 300, mPaintText );    }}

布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    xmlns:view="http://schemas.android.com/apk/res/com.test.mypathview"      android:layout_width="match_parent"    android:layout_height="match_parent" >    <!-- 在上面导入自己的样式,跟自己的包名,并定义名字,然后根据名字使用自己定义的属性-->    <Button         android:id="@+id/button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="button"/>    <!--在布局文件中使用自己定义的属性-->    <com.test.mypathview.MyPath        android:id="@+id/progress"        android:layout_width="match_parent"        android:layout_height="match_parent"         />    <TextView        android:id="@+id/textview"        android:layout_width="200dp"        android:layout_height="200dp"        android:layout_centerInParent="true"        android:gravity="center"        android:text="A"        android:textSize="100sp" /></RelativeLayout>

效果图

这里写图片描述

0 0