志在指尖
用双手敲打未来

Android 控件控件 TextProgressBar 进度条上显文字

Android系统的进度条控件默许的设计的不是很周全,比方没有包含文字的显现,那么如何在Android进度条控件上显
示文字呢?来自Google内部的代码来理解下,主要运用的addView这样的办法经过掩盖一层Chronometer秒表控件来完成,
整个代码如下Android
publicclassTextProgressBarextendsRelativeLayoutimplementsOnChronometerTickListener{
publicstaticfinalStringTAG=”TextProgressBar”;
staticfinalintCHRONOMETER_ID=android.R.id.text1;
staticfinalintPROGRESSBAR_ID=android.R.id.progress;
ChronometermChronometer=null;
ProgressBarmProgressBar=null;
longmDurationBase=-1;
intmDuration=-1;
booleanmChronometerFollow=false;
intmChronometerGravity=Gravity.NO_GRAVITY;
publicTextProgressBar(Contextcontext,AttributeSetattrs,intdefStyle){
super(context,attrs,defStyle);
}
publicTextProgressBar(Contextcontext,AttributeSetattrs){
super(context,attrs);
}
publicTextProgressBar(Contextcontext){
super(context);
}//Android开发网提示关键局部在这里
@Override
publicvoidaddView(Viewchild,intindex,ViewGroup.LayoutParamsparams){
super.addView(child,index,params);
intchildId=child.getId();
if(childId==CHRONOMETER_ID&&childinstanceofChronometer){
mChronometer=(Chronometer)child;
mChronometer.setOnChronometerTickListener(this);
//CheckifChronometershouldmovewithwithProgressBar
mChronometerFollow=(params.width==ViewGroup.LayoutParams.WRAP_CONTENT);
mChronometerGravity=(mChronometer.getGravity()&Gravity.HORIZONTAL_GRAVITY_MASK);
}elseif(childId==PROGRESSBAR_ID&&childinstanceofProgressBar){
mProgressBar=(ProgressBar)child;
}
}
@android.view.RemotableViewMethod
publicvoidsetDurationBase(longdurationBase){
mDurationBase=durationBase;
if(mProgressBar==null||mChronometer==null){
thrownewRuntimeException(“ExpectingchildProgressBarwithid”+
“‘android.R.id.progress’andChronometerid’android.R.id.text1′”);
}
//UpdatetheProgressBarmaximumrelativetoChronometerbase
mDuration=(int)(durationBase-mChronometer.getBase());
if(mDuration<=0){
mDuration=1;
}
mProgressBar.setMax(mDuration);
}
publicvoidonChronometerTick(Chronometerchronometer){
if(mProgressBar==null){
thrownewRuntimeException(
“ExpectingchildProgressBarwithid’android.R.id.progress'”);
}
//StopChronometerifwe’repastduration
longnow=SystemClock.elapsedRealtime();
if(now>=mDurationBase){
mChronometer.stop();
}intremaining=(int)(mDurationBase-now);
mProgressBar.setProgress(mDuration-remaining);
if(mChronometerFollow){
RelativeLayout.LayoutParamsparams;
params=(RelativeLayout.LayoutParams)mProgressBar.getLayoutParams();
intcontentWidth=mProgressBar.getWidth()-(params.leftMargin+params.rightMargin);
intleadingEdge=((contentWidth*mProgressBar.getProgress())/
mProgressBar.getMax())+params.leftMargin;
intadjustLeft=0;
inttextWidth=mChronometer.getWidth();
if(mChronometerGravity==Gravity.RIGHT){
adjustLeft=-textWidth;
}elseif(mChronometerGravity==Gravity.CENTER_HORIZONTAL){
adjustLeft=-(textWidth/2);
}
leadingEdge+=adjustLeft;
intrightLimit=contentWidth-params.rightMargin-textWidth;
if(leadingEdge<params.leftMargin){
leadingEdge=params.leftMargin;
}elseif(leadingEdge>rightLimit){
leadingEdge=rightLimit;
}
params=(RelativeLayout.LayoutParams)mChronometer.getLayoutParams();
params.leftMargin=leadingEdge;
mChronometer.requestLayout();
}
}
}

未经允许不得转载:IT技术网站 » Android 控件控件 TextProgressBar 进度条上显文字
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载