Android控件TextProgressBar进度条上显文字

yxlhero1 2011-06-17 02:41:23
在网上找找到了这样一段代码,哎,可是不知道怎么去看他的效果,该怎么实现他的效果啊? 跪求??????在线等,希望知道的大侠们给整一下,,,,,
public class TextProgressBar extends RelativeLayout implements OnChronometerTickListener {
public static final String TAG = "TextProgressBar";

static final int CHRONOMETER_ID = android.R.id.text1;
static final int PROGRESSBAR_ID = android.R.id.progress;

Chronometer mChronometer = null;
ProgressBar mProgressBar = null;

long mDurationBase = -1;
int mDuration = -1;

boolean mChronometerFollow = false;
int mChronometerGravity = Gravity.NO_GRAVITY;

public TextProgressBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

public TextProgressBar(Context context, AttributeSet attrs) {
super(context, attrs);
}

public TextProgressBar(Context context) {
super(context);
}

//Android开发网提示关键部分在这里


public void addView(View child, int index, ViewGroup.LayoutParams params) {
super.addView(child, index, params);

int childId = child.getId();
if (childId == CHRONOMETER_ID && child instanceof Chronometer) {
mChronometer = (Chronometer) child;
mChronometer.setOnChronometerTickListener(this);

// Check if Chronometer should move with with ProgressBar
mChronometerFollow = (params.width == ViewGroup.LayoutParams.WRAP_CONTENT);
mChronometerGravity = (mChronometer.getGravity() & Gravity.HORIZONTAL_GRAVITY_MASK);

} else if (childId == PROGRESSBAR_ID && child instanceof ProgressBar) {
mProgressBar = (ProgressBar) child;
}
}


public void setDurationBase(long durationBase) {
mDurationBase = durationBase;

if (mProgressBar == null || mChronometer == null) {
throw new RuntimeException("Expecting child ProgressBar with id " +
"'android.R.id.progress' and Chronometer id 'android.R.id.text1'");
}

// Update the ProgressBar maximum relative to Chronometer base
mDuration = (int) (durationBase - mChronometer.getBase());
if (mDuration <= 0) {
mDuration = 1;
}
mProgressBar.setMax(mDuration);
}


public void onChronometerTick(Chronometer chronometer) {
if (mProgressBar == null) {
throw new RuntimeException(
"Expecting child ProgressBar with id 'android.R.id.progress'");
}

// Stop Chronometer if we're past duration
long now = SystemClock.elapsedRealtime();
if (now >= mDurationBase) {
mChronometer.stop();
}


int remaining = (int) (mDurationBase - now);
mProgressBar.setProgress(mDuration - remaining);


if (mChronometerFollow) {
RelativeLayout.LayoutParams params;


params = (RelativeLayout.LayoutParams) mProgressBar.getLayoutParams();
int contentWidth = mProgressBar.getWidth() - (params.leftMargin + params.rightMargin);
int leadingEdge = ((contentWidth * mProgressBar.getProgress()) /
mProgressBar.getMax()) + params.leftMargin;


int adjustLeft = 0;
int textWidth = mChronometer.getWidth();
if (mChronometerGravity == Gravity.RIGHT) {
adjustLeft = -textWidth;
} else if (mChronometerGravity == Gravity.CENTER_HORIZONTAL) {
adjustLeft = -(textWidth / 2);
}


leadingEdge += adjustLeft;
int rightLimit = contentWidth - params.rightMargin - textWidth;
if (leadingEdge < params.leftMargin) {
leadingEdge = params.leftMargin;
} else if (leadingEdge > rightLimit) {
leadingEdge = rightLimit;
}

params = (RelativeLayout.LayoutParams) mChronometer.getLayoutParams();
params.leftMargin = leadingEdge;


mChronometer.requestLayout();

}
}
}


...全文
637 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
kangnixi 2011-06-22
  • 打赏
  • 举报
回复
我是这么实现的:

自定义一个类继承FrameLayout,然后先添加ProgressBar,再添加TextView

根据ProgressBar的长度变化来控制TextView的文字变化。

===
个人博客:www.girlcoding.com

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧