Android学习笔记十二之Android基础UI三.docx

上传人:b****6 文档编号:6676913 上传时间:2023-01-08 格式:DOCX 页数:17 大小:63.17KB
下载 相关 举报
Android学习笔记十二之Android基础UI三.docx_第1页
第1页 / 共17页
Android学习笔记十二之Android基础UI三.docx_第2页
第2页 / 共17页
Android学习笔记十二之Android基础UI三.docx_第3页
第3页 / 共17页
Android学习笔记十二之Android基础UI三.docx_第4页
第4页 / 共17页
Android学习笔记十二之Android基础UI三.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

Android学习笔记十二之Android基础UI三.docx

《Android学习笔记十二之Android基础UI三.docx》由会员分享,可在线阅读,更多相关《Android学习笔记十二之Android基础UI三.docx(17页珍藏版)》请在冰豆网上搜索。

Android学习笔记十二之Android基础UI三.docx

Android学习笔记十二之Android基础UI三

Android学习笔记十二之Android基础UI三

ScrollView滚动视图

  ScrollView是继承于FrameLayout,也是一个显示容器,由于手机屏幕是有限的,当需要组件安排多组信息的时候,ScrollView可以安排这些组件,我们浏览的时候可以进行滑动操作,滚动显示。

但是,需要注意的是,ScrollView只能包含一种组件。

实现代码:

@Override

protectedvoidonCreate(@NullableBundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_scrollview);

tv_scrollview_show=(TextView)findViewById(R.id.tv_show);

btn_to_top=(Button)findViewById(R.id.btn_to_top);

btn_to_bottom=(Button)findViewById(R.id.btn_to_bottom);

scrollView=(ScrollView)findViewById(R.id.sc);

initData();

btn_to_top.setOnClickListener(newView.OnClickListener(){

@Override

publicvoidonClick(Viewview){

scrollView.fullScroll(ScrollView.FOCUS_UP);

}

});

btn_to_bottom.setOnClickListener(newView.OnClickListener(){

@Override

publicvoidonClick(Viewview){

scrollView.fullScroll(ScrollView.FOCUS_DOWN);

}

});

}

privatevoidinitData(){

StringBufferbuffer=newStringBuffer();

for(inti=1;i<120;i++){

buffer.append("这是第"+i+"个条目"+"\n");

}

tv_scrollview_show.setText(buffer.toString());

}

效果图:

ScrollView就介绍到这里,这个不是很常用。

ProgressBar进度条

  进度条在很多场景下都需要用到,在进行一些耗时操作,如果不做进度显示,用户会以为应用ANR,给用户造成不好的体验,所以需要用到进度条。

Android系统提供的进度条ProgressBar继承于View,有如下的属性:

android:

max:

进度条的最大值

android:

progress:

进度条已完成进度

android:

progressDrawable:

设置轨道对应的Drawable对象

android:

indeterminate:

如果设置成true,则进度条不精确显示进度

android:

indeterminateDrawable:

设置不显示进度的进度条的Drawable对象

android:

indeterminateDuration:

设置不精确显示进度的持续时间

android:

secondaryProgress:

二级进度条,类似于视频播放的一条是当前播放进度,一条是缓冲进度,前者通过progress属性进行设置!

对应Java方法有:

getMax():

获取这个进度条的上限

getProgress():

获取到当前进度

getSecondaryProgress():

获取次要进度

incrementProgressBy(intdiff):

指定增加的进度

isIndeterminate():

指示进度条是否处于不确定模式

setIndeterminate(booleanindeterminate):

设置进度条进入不确定模式

系统提供的进度条在这里就不多介绍了,比较简单,下面是自定义进度条的例子:

packagecom.example.hello_baseui.widget;

importandroid.content.Context;

importandroid.content.res.TypedArray;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.RectF;

importandroid.graphics.Typeface;

importandroid.util.AttributeSet;

importandroid.view.View;

importcom.example.hello_baseui.R;

/**

*CreatedbyAdministratoron2016/6/29.

*/

publicclassCircleProgressBarextendsView{

/**

*画笔对象的引用

*/

privatePaintpaint;

/**

*圆环的颜色

*/

privateintcircleColor;

/**

*圆环进度的颜色

*/

privateintcircleProgressColor;

/**

*中间进度百分比的字符串的颜色

*/

privateinttextColor;

/**

*中间进度百分比的字符串的字体大小

*/

privatefloattextSize;

/**

*圆环的宽度

*/

privatefloatcircleWidth;

/**

*最大进度

*/

privateintmax;

/**

*当前进度

*/

privateintprogress;

/**

*是否显示中间的进度

*/

privatebooleanisShowProgressText;

/**

*进度的风格,实心或者空心

*/

privateintcircleStyle;

privatefloatstrokeWidth;

/**

*空心

*/

publicstaticfinalintSTROKE=0;

/**

*实心

*/

publicstaticfinalintFILL=1;

/**

*构造器

*

*@paramcontext

*/

publicCircleProgressBar(Contextcontext){

this(context,null);

}

/**

*构造器

*

*@paramcontext

*@paramattrs

*/

publicCircleProgressBar(Contextcontext,AttributeSetattrs){

this(context,attrs,0);

}

/**

*构造器

*

*@paramcontext

*@paramattrs

*@paramdefStyleAttr

*/

publicCircleProgressBar(Contextcontext,AttributeSetattrs,intdefStyleAttr){

super(context,attrs,defStyleAttr);

initView(context,attrs);

}

/**

*初始化组件

*

*@paramcontext

*@paramattrs

*/

privatevoidinitView(Contextcontext,AttributeSetattrs){

paint=newPaint();

TypedArraymTypedArray=context.obtainStyledAttributes(attrs,R.styleable.CircleProgressBar);

circleColor=mTypedArray.getColor(R.styleable.CircleProgressBar_circleColor,Color.RED);

circleProgressColor=mTypedArray.getColor(R.styleable.CircleProgressBar_circleProgressColor,Color.BLUE);

textColor=mTypedArray.getColor(R.styleable.CircleProgressBar_textColor,Color.BLUE);

textSize=mTypedArray.getDimension(R.styleable.CircleProgressBar_textSize,14);

circleWidth=mTypedArray.getDimension(R.styleable.CircleProgressBar_circleWidth,10);

isShowProgressText=mTypedArray.getBoolean(R.styleable.CircleProgressBar_isShowProgressText,true);

circleStyle=mTypedArray.getInt(R.styleable.CircleProgressBar_circleStyle,0);

mTypedArray.recycle();

}

/**

*绘制

*

*@paramcanvas

*/

@Override

protectedvoidonDraw(Canvascanvas){

super.onDraw(canvas);

//绘制最外层的大圆

intcentre=getWidth()/2;//获取圆心的x坐标

intradius=(int)(centre-circleWidth/2)-2;//圆环的半径

paint.setColor(circleColor);

paint.setStyle(Paint.Style.STROKE);//设置为空心

paint.setStrokeWidth(strokeWidth);//设置圆环的宽度

paint.setAntiAlias(true);//消除锯齿

canvas.drawCircle(centre,centre,radius,paint);//画出圆环

//===========================================================

//绘制进度的百分比

paint.setStrokeWidth(0);

paint.setColor(textColor);

paint.setTextSize(textSize);

paint.setTypeface(Typeface.DEFAULT_BOLD);//设置字体

intpercent=(int)(((float)progress/(float)max)*100);//中间的进度百分比,先转换成float在进行除法运算,不然都为0

floattextWidth=paint.measureText(percent+"%");//测量字体宽度,我们需要根据字体的宽度设置在圆环中间

if(isShowProgressText&&circleStyle==STROKE){

canvas.drawText(percent+"%",centre-textWidth/2,centre+textSize/2,paint);//画出进度百分比

}

//============================================================================

//绘制圆弧和进度

paint.setStrokeWidth(strokeWidth);//设置圆环的宽度

paint.setColor(circleProgressColor);//设置进度的颜色

RectFoval=newRectF(centre-radius-1,centre-radius-1,centre+radius+1,centre+radius+1);//用于定义的圆弧的形状和大小的界限

switch(circleStyle){

caseSTROKE:

{

paint.setStyle(Paint.Style.STROKE);

canvas.drawArc(oval,90,360*progress/max,false,paint);//根据进度画圆弧

break;

}

caseFILL:

{

paint.setStyle(Paint.Style.FILL_AND_STROKE);

if(progress!

=0)

canvas.drawArc(oval,90,360*progress/max,true,paint);//根据进度画圆弧

break;

}

}

}

//==============================getandset========================

/**

*设置进度的最大值

*

*@parammax

*/

publicsynchronizedvoidsetMax(intmax){

if(max<0){

thrownewIllegalArgumentException("Themaxcannotlessthan0");

}

this.max=max;

}

publicsynchronizedintgetMax(){

returnmax;

}

/**

*获取进度.需要同步

*

*@return

*/

publicsynchronizedintgetProgress(){

returnprogress;

}

/**

*设置进度,此为线程安全控件,由于考虑多线的问题,需要同步

*刷新界面调用postInvalidate()能在非UI线程刷新

*

*@paramprogress

*/

publicsynchronizedvoidsetProgress(intprogress){

if(ress<0){

thrownewIllegalArgumentException("Theprogresscannotlessthen0");

}

if(progress>max){

progress=max;

}

if(progress<=max){

this.progress=progress;

postInvalidate();

}

}

publicintgetCircleColor(){

returncircleColor;

}

/**

*设置圆环的颜色

*

*@paramcircleColor

*/

publicvoidsetCircleColor(intcircleColor){

this.circleColor=circleColor;

}

publicintgetTextColor(){

returntextColor;

}

/**

*设置圆环字体的颜色

*

*@paramtextColor

*/

publicvoidsetTextColor(inttextColor){

this.textColor=textColor;

}

publicfloatgetTextSize(){

returntextSize;

}

/**

*设置圆环字体的大小

*

*@paramtextSize

*/

publicvoidsetTextSize(floattextSize){

this.textSize=textSize;

}

publicfloatgetCircleWidth(){

returncircleWidth;

}

/**

*设置圆的宽度

*

*@paramcircleWidth

*/

publicvoidsetCircleWidth(floatcircleWidth){

this.circleWidth=circleWidth;

}

publicbooleanisShowProgressText(){

returnisShowProgressText;

}

/**

*设置是否显示进度百分比

*

*@paramshowProgressText

*/

publicvoidsetShowProgressText(booleanshowProgressText){

isShowProgressText=showProgressText;

}

publicintgetCircleStyle(){

returncircleStyle;

}

/**

*设置圆环的样式,空心和实心

*

*@paramcircleStyle

*/

publicvoidsetCircleStyle(intcircleStyle){

this.circleStyle=circleStyle;

}

publicfloatgetStrokeWidth(){

returnstrokeWidth;

}

/**

*设置绘制圆环的宽度

*@paramstrokeWidth

*/

publicvoidsetStrokeWidth(floatstrokeWidth){

this.strokeWidth=strokeWidth;

}

publicintgetCircleProgressColor(){

returncircleProgressColor;

}

/**

*设置绘制圆环进度的颜色

*@paramcircleProgressColor

*/

publicvoidsetCircleProgressColor(intcircleProgressColor){

this.circleProgressColor=circleProgressColor;

}

//==============================getandset========================

}

使用例子:

布局文件代码:

xmlversion="1.0"encoding="utf-8"?

>

android:

layout_width="match_parent"

android:

layout_height="match_parent"

android:

orientation="vertical">

android:

id="@+id/cpb"

android:

layout_width="100dp"

android:

layout_height="100dp"

android:

layout_marginLeft="10dp"

android:

layout_marginTop="10dp"

android_custom:

circleColor="#D1D1D1"

android_custom:

textSize="20sp"/>

Java代码:

privateCircleProgressBarcircleProgressBar;

intprogressStatus=0;

@Override

protectedvoidonCreate(@NullableBundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_progressbar);

circleProgressBar=(CircleProgressBar)findViewById(R.id.cpb);

circleProgressBar.setMax(00);

circleProgressBar.setCircleWidth(30);

circleProgressBar.setStrokeWidth(10);

circleProgressBar.setCircleProgressColor(Color.BLUE);

finalHandlerhandler=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

if(msg.what==0){

circleProgressBar.setProgress(progressStatus);

}

}

};

newThread(newRunnable(){

@Override

publicvoidrun(){

while(progressStatus<100){

progressStatus+=3;

try{

Thread.sleep(1000);

handler.sendEmptyMessage(0);

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

}

}).start();

}

实现效果图:

SeekBar拖动条

  SeekBar

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1