日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 画爱心进度条_Android 开发之 HeartProgress 自定义心形进度条

發布時間:2024/3/26 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 自定义心形进度条的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。