Android條紋進(jìn)度條的實現(xiàn)(調(diào)整view寬度仿進(jìn)度條)
前言
本文主要給大家介紹了關(guān)于Android條紋進(jìn)度條(調(diào)整view寬度仿進(jìn)度條)的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧
方法如下:
美工同學(xué)指定了一個進(jìn)度條樣式

進(jìn)度條樣式
這斑斕的進(jìn)度條,如果要自己畫實在是勞民傷財。于是請美工切了一張素材。

素材樣例
如果用shape或者.9圖片不太好處理這個條紋。轉(zhuǎn)變思路,放置2張圖片。一張作為背景(底,bottom),一張作為進(jìn)度條圖片(cover)。
進(jìn)度改變時,改變上面圖片的寬度。
這就要求上面的圖片是圓角的。自定義ImageView,調(diào)用canvas.clipPath來切割畫布。
public class RoundCornerImageView extends android.support.v7.widget.AppCompatImageView {
private float mRadius = 18;
private Path mClipPath = new Path();
private RectF mRect = new RectF();
public RoundCornerImageView(Context context) {
super(context);
}
public RoundCornerImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RoundCornerImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setRadiusDp(float dp) {
mRadius = dp2px(dp, getResources());
postInvalidate();
}
public void setRadiusPx(int px) {
mRadius = px;
postInvalidate();
}
@Override
protected void onDraw(Canvas canvas) {
mRect.set(0, 0, this.getWidth(), this.getHeight());
mClipPath.reset(); // remember to reset path
mClipPath.addRoundRect(mRect, mRadius, mRadius, Path.Direction.CW);
canvas.clipPath(mClipPath);
super.onDraw(canvas);
}
private float dp2px(float value, Resources resources) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, resources.getDisplayMetrics());
}
}
每次繪制都切割一次圓角。記得調(diào)用Path.reset()方法。
回到我們要的進(jìn)度條。布局文件中放置好層疊的圖片。
<RelativeLayout android:id="@+id/progress_layout" android:layout_width="190dp" android:layout_height="10dp" android:layout_centerInParent="true"> <ImageView android:id="@+id/p_bot_iv" android:layout_width="190dp" android:layout_height="10dp" android:src="@drawable/shape_round_corner_bottom" /> <com.rustfisher.view.RoundCornerImageView android:id="@+id/p_cover_iv" android:layout_width="100dp" android:layout_height="10dp" android:scaleType="centerCrop" android:src="@drawable/pic_cover_blue_white" /> </RelativeLayout>
需要在代碼中動態(tài)地改變cover的寬度;dialog中提供如下方法改變LayoutParams
public void updatePercent(int percent) {
mPercent = percent;
mPercentTv.setText(String.format(Locale.CHINA, "%2d%%", mPercent));
float percentFloat = mPercent / 100.0f;
final int ivWidth = mBotIv.getWidth();
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) mProgressIv.getLayoutParams();
int marginEnd = (int) ((1 - percentFloat) * ivWidth);
lp.width = ivWidth - marginEnd;
mProgressIv.setLayoutParams(lp);
mProgressIv.postInvalidate();
}
顯示出dialog并傳入進(jìn)度,就可以看到效果了。
這只是實現(xiàn)效果的一種方法,如果有更多的想法,歡迎和我交流~
相關(guān)代碼請參閱:
package com.rust.aboutview.activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.rust.aboutview.R;
import com.rust.aboutview.widget.RoundCornerProgressDialog;
import com.rustfisher.view.RoundCornerImageView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* 圓角圖片示例
* Created by Rust on 2018/5/23.
*/
public class RoundCornerActivity extends AppCompatActivity implements View.OnClickListener {
@BindView(R.id.r_iv_1)
RoundCornerImageView mRIv1;
@BindView(R.id.r_iv_2)
RoundCornerImageView mRIv2;
@BindView(R.id.r_iv_3)
RoundCornerImageView mRIv3;
@BindView(R.id.r_iv_4)
RoundCornerImageView mRIv4;
private Handler mMainHandler = new Handler(Looper.getMainLooper());
private RoundCornerProgressDialog mRoundCornerProgressDialog;
private ProgressThread mProgressThread;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_round_corner);
initUI();
}
private void initUI() {
ButterKnife.bind(this);
mRIv1.setRadiusDp(12);
mRIv2.setRadiusDp(23);
mRIv3.setRadiusPx(40);
mRIv4.setRadiusPx(200);
}
@OnClick(R.id.pop_dialog_btn)
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.pop_dialog_btn:
popRoundProgressDialog();
break;
}
}
private void popRoundProgressDialog() {
if (null == mRoundCornerProgressDialog) {
mRoundCornerProgressDialog = new RoundCornerProgressDialog();
}
mRoundCornerProgressDialog.setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTranslucentOrigin);
mRoundCornerProgressDialog.show(getSupportFragmentManager(), RoundCornerProgressDialog.F_TAG);
if (null != mProgressThread) {
mProgressThread.interrupt();
try {
mProgressThread.join(400);
} catch (InterruptedException e) {
e.printStackTrace();
}
mProgressThread = null;
}
mProgressThread = new ProgressThread();
mProgressThread.start();
}
private class ProgressThread extends Thread {
private int progress = 0;
@Override
public void run() {
super.run();
while (!isInterrupted()) {
progress++;
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
if (progress > 100) {
progress = 0;
}
final int p = progress;
mMainHandler.post(new Runnable() {
@Override
public void run() {
mRoundCornerProgressDialog.updatePercent(p);
}
});
}
}
}
}
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- Android 七種進(jìn)度條的樣式
- Android中實現(xiàn)Webview頂部帶進(jìn)度條的方法
- android自定義進(jìn)度條漸變色View的實例代碼
- Android文件下載進(jìn)度條的實現(xiàn)代碼
- android ListView和ProgressBar(進(jìn)度條控件)的使用方法
- Android中自定義進(jìn)度條詳解
- Android編程之ProgressBar圓形進(jìn)度條顏色設(shè)置方法
- android自定義進(jìn)度條漸變圓形
- Android帶進(jìn)度的圓形進(jìn)度條
- Android自定義水平進(jìn)度條的圓角進(jìn)度
相關(guān)文章
Android編程實現(xiàn)獲得手機(jī)屏幕真實寬高的方法
這篇文章主要介紹了Android編程實現(xiàn)獲得手機(jī)屏幕真實寬高的方法,以兩個實例形式分析了獲取手機(jī)屏幕信息的相關(guān)技巧,需要的朋友可以參考下2015-10-10
View Controller Transition實現(xiàn)京東加購物車效果
這篇文章主要介紹了View Controller Transition實現(xiàn)京東加購物車效果,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-02-02
Android基于opencv實現(xiàn)多通道分離與合并
針對圖像多通道的分離與混合,OpenCV 4中提供了split()函數(shù)和merge()函數(shù)用于解決這些需求。本文講解一下Android如何調(diào)用這些函數(shù)實現(xiàn)多通道分離與合并2021-06-06
Android Studio 配置國內(nèi)鏡像源的實現(xiàn)步驟
本文主要介紹了Android Studio 配置國內(nèi)鏡像源的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
Android實現(xiàn)WebView點擊攔截跳轉(zhuǎn)原生
這篇文章主要介紹了Android實現(xiàn)WebView點擊攔截跳轉(zhuǎn)原生,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03

