android 画爱心进度条_Android 开发之 HeartProgress 自定义心形进度条
今天找到一個比較不錯的進度有關的素材,隨即寫了一個自定義控件HeartProgress,思路:先把圖片繪制進去,然后根據進度值,截取圖片自下而上的范圍,進行裁剪,裁剪后的圖片進行圖片變色,然后重新繪制到View,公開方法setProgress (int progress)控制進度顯示。(也可以換一種實現方式,設置xFermode..)下面是效果圖:
自定義控件的基本使用都差不多,這里就就簡單明一下,先獲取心形背景圖片的絕對寬高,進行onMeasure
mDrawable=getBackground();
mWidth=mDrawable.getIntrinsicWidth();
mHeight=mDrawable.getIntrinsicHeight();
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
setMeasuredDimension(mWidth, mHeight);
}
根據當前進度mProgress 進行計算,得出圖片自下而上的矩形裁剪區域(如果要弧形旋轉效果,裁剪方式需要改變,原理相同,這里不作說明 了)
public void caculater(){
mRectHeight=mHeight*mProgress/100;//這里必須先乘以mProgress再除以100
minX=0;
minY=mHeight-mRectHeight;
maxX=mWidth;
}
然后調用Bitmap的圖片裁剪方法得到裁剪區域圖片
Bitmap retBitmap = Bitmap.createBitmap(bgBitmap, minX, minY, maxX, mRectHeight, matrix, true);
給裁剪圖片設置濾色,再重新繪制到View里面
canvas.drawBitmap(retBitmap, 0, mHeight-mRectHeight, mPaint);
ColorMatrix mColorMatrix = new ColorMatrix();
mColorMatrix.set(getArrayFilter());
mPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));
canvas.drawBitmap(retBitmap, 0, mHeight-mRectHeight, mPaint);
對外公開setProgress方法
public void setProgress(final int progress){
new Thread(){
public void run() {
try {
for (int i = 0; i <= progress; i++) {
if(i>mProgress){
mProgress=i;
postInvalidate();
Thread.sleep(100);
}else if(i
mProgress--;
postInvalidate();
Thread.sleep(100);
}
}
Thread.interrupted();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
整個自定義View都挺簡單的值得一說的是圖片濾色,Android開發中的顏色矩陣
ColorMatrix如圖:
5*4的矩陣,按照紅、藍、綠、透明度、偏移量排列,代碼里面:
private float[] getArrayFilter() {
float []arr=new float[20];
for (int i = 0; i < arr.length; i++) {
if(i==0){
arr[i]=2.0f;
}else if(i==6||i==12||i==18){
arr[i]=1.0f;
}else{
arr[i]=0.0f;
}
}
return arr;
}
這里把紅色列值放大,呈現出的顏色偏紅,這個就是所謂的濾色,通過顏色矩陣還可以實現顏色的飽和度、對比度、色變等圖片處理效果,系統相機拍照選擇模式也就是這個原理。
總結
以上是生活随笔為你收集整理的android 画爱心进度条_Android 开发之 HeartProgress 自定义心形进度条的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm32控制360度舵机和180度舵机
- 下一篇: Android 可滑动的悬浮View