版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android移动终端开发大作业
一、作业要求
•1人一组,独立完成。
•依据个人爱好方向,自选题目,完成系统。
•在规定的时间里完成系统主体功能,程序比较稳定的运行。
•手机界面要求简洁、美观,功能不能过于简洁,应具备确定的好用性。
•至少要3个Activity以上。
•必需运用自定义Listview,要运用Sqlite数据库或API调用与数据解析(API
可运用聚合数据()、APIStore()或apix()供应的API,如有实力也可
自行开发服务器端)。
•欢迎好的创意作品、好用作品,评分时会适当加分。
•需提交设计报告,设计报告格式见附件,按附件依次装订(包括评分表)
•大作业成果从工作量、功能点、创新性、好用性、报告的字数、质量及规范
度等方面的成果构成
二、留意事项
•压缩包内作业内容包括两部分:
①作业项目文件夹,项目必需能够调试通过,android平台选择选择2.2或是233。
②作业设计说明,word文件。
•可以借鉴网络上的代码,但不行全部照搬。
不许相互抄袭,一旦发觉成果为零。
附件1:
学号17
成绩
Android平台移动应用开发
大作业
基于Android的新闻阅读软件的设计与
题目
实现
学院信息工程学院
专业信息工程
班级信息1303
姓名杏允升
指导老师秦珀石
2023年12月10日
一、3
二、概述4
三、关键技术5
四、概要设计11
五、系统实现12
六、心得体会错误!未定义书签。
一、概述
Android应用平台新闻客户端软件是基于Android手机平台,接受Java语言,
从网络上的开放的新闻接口获得数据,设计出针对运用Android平台的手机新闻
客户端资讯实时掌控的手机应用程序。
Android平台新闻客户端软件的开发可以进一步扩大时事新闻的覆盖面,让广
袤公众能够随时随地便利且快捷地获得最新的新闻资讯信息,了解新闻时事,本
软件的广泛运用,尤其是在传授学问、普及教化方面起着特殊重要的作用。
目前市场探讨机构Worldpanel发布了全球主要的国家智能手机操作系统在去
年Q4内的分布报告,报告指出了谷歌的Android接着保持着增长的势态,但是
增幅已经明显放缓了。而在另一个方面,苹果iOS操作系统在全球只能手机市
场上均有下滑,个别国家的降幅甚至高达10.3%o最新统计数据中显示,Android
操作系统将接着领跑全球市场,包括美国、澳大利亚、中国、意大利、英国、德
国、西班牙等所占的市场比例都已经超出50%,并且还将接着呈现上涨的趋势。
而在苹果iOS操作系统方面,最大的市场份额所占比的国家照旧是美国,数值
为43.9%;紧随美国的则是澳大利亚,数值为35.2%;而在中国方面,市场份
额也从21.2%下降到了19%;在意大利,iOS所占的市场份额更是从23.1%猛
降至12.8%。
从上面的数据可以看出,Android手机软件的开发具有巨大的发展前景,在
Android系统上开发出一款手机新闻客户端软件所支持的用户量也是相比较于其
他系统多出很多的。
谷歌的移动平台主管安迪•鲁宾(AndyRubin)表示,跟软件开发合作对象的密
切接触正在进行中。Google与开放手机联盟联合开发了Android操作系统,这
个联盟由摩托罗拉、高通、宏达电、中国移动和T-Mobile等在内的多家无线应
用和技术的领军企业组成。Google通过与设备制造商、开发商、运营商和其他
有关各方结成深层次的合作关系,希望借助建立开放式、标准化的移动移动电话
软件平台,在移动产业内形成一个开放性的生态系统,这将是开发Android软件
的一个契机,Android平台的开发在将来必定大放异彩。
、关键技术
1)运用ViewPager里面添加多张图片协作线程延时实现轮播图的自
没有通过ScheduledExecutorService或Timer定期执行某个任务实现,而是简
洁的通过handler发送消息去完成一次滚动,在完成一次滚动后发送另外一个
de山y的滚动消息,如此循环实现。自动滚动部分核心代码如下:
电Java
publicvoidstartAutoScrollQ{
isAutoScroll=true;
sendScrollMessage(intervQl);
}
privatevoidsendScrollMessage(longdelayTimelnMills){
/♦♦removemessagesbefore,keepsonemessageisrunningatmost♦♦/
handler.removeMessages(SCROLL_A'HAT);
handler.sendEmptyMessageDelayedfSCROLL^WAT,delayTimelnMills);
}
privateclassMyHondlerextendsHandler{
^Override
publicvoidhandleMessagefMessagemsg){
super.handleMessage(msg);
switch(msg.what){
caseSCROLL_WHAT:
scrollOnceQ;
sendScrollMessageCinterval);
break;
}
}
}
至于ViewPager嵌套引起子ViewPager无法触摸问题是通过在子ViewPager
的onTouchEvent中添加
凄]Java
getParentO-requestDisaUowInterceptTouchEvent(true);
禁止父控件对touchevent做intercept解决的。
ViewPager滑动速度的设置是通过反射的方式重新设置ViewPager的Scroller,
变更Scroller的startScroll的间隔时间完成的。调用
setScrollDurationFactor(double)即可。
2、运用
(1)引入公共库
引入AndroidAutoScrollViewPager@Github作为你项目的library(如何拉取代
码及添加公共库)。
(2)调用
仅需简洁两步:
a.布局定义
雷Java
<cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager
android:id="—d/view_pager”
android:layout_width»"match_parent"
android:layout_height="wrap_content”/>
代替一般的ViewPager定义
b.启动ViewPager自动滚动
startAutoScroll()启动自动滚动
stopAutoScroll()停止自动滚动
3、设置
setlnterval(long)设置自动滚动的间隔时间,单位为毫秒
setDirection(int)设置自动滚动的方向,默认向右
setCycle(boolean)是否自动循环轮播,默认为true
setScrollDurationFactor(double)设置ViewPager滑动动画间隔时间的倍率,达
到减慢动画或变更动画速度的效果
setStopScrollWhenTouch(boolean)当手指遇到ViewPager时是否停止自动滚
动,默认为true
setSlideBorderMode(int)滑动到第一个或最终一个Item的处理方式,支持没有
任何操作、轮播以及传递到父View三种模式
setBorderAnimation(boolean)设置循环滚动时滑动到从边缘滚动到下一个是否
须要动画,默认为true
4、其他
(1)指示器,圆形或是方形指示器请协作ViewPagerlndicator运用
(2)无限循环,假如希望在最终一张接着播放第一张而不是退回到第一张,请
参考AutoScrollViewPagerSingleDemo.java,留意这个特性不能和
ViewPagerlndicator运用
2)运用viewpager结合ViewPagelndicator进行新闻类别的分类切换,可点击切
换也可以滑动切换。
1.ViewPagerIndicatortKjLibrary
查看ViewpagerIndicator的Library代码,可以看到此项目的设计思想:
首先定义了一个Pageindicator接口,它里面定义了最重要和基本的indi
cator表现出的一些方法:
1.1首先•一个indicator必需要与一个ViewPager关联在一起,所以
它供应了一个setViewPager方法。
1.2它扩展了ViewPager.OnPageChangeListener接口,表示接管
了ViewPager的Pager变更时的监听处理,
这也是为什么为ViewPager设置OnPageChangeListener监听
器时不能设置在ViewPager上而必需设置在
indicator上的缘由。
1.3还有一个notifyDataSetChanged通知方法,表示为这个ViewP
ager供应View(一般是Fragment)的Adapter里面的数据集发生变更
时,执行的动作,这里可增加相关的逻辑。
2.ViewpagerIndicator的实现类
然后再看下ViewpagerIndicator的实现类,共有6个,由6个类分别
实现,它们分别为:
2.1小圆圈类型的
2.2带图标类型的
2.3小横线类型的,距离屏幕最下边端有确定的距离。
2.4标签类型的(Tab)
2.5标题类型的,与标签类型的有点像,但它当前的标题页的左/右边
的标题会卷起,即往两端缩进去。
2.6屏幕底部小横线类型的,并且会占满整行。
3.ViewpagerIndicator■随附带的Demo
Demo项目的设计
项目由一个ListSamples的ListActivity入口,它主要用作组装全部的
子indicator的列表。
TestFragment.java,全部ViewPager上真正显示的视图。
TestFragmentAdapter.java,全部ViewPager里的Adapter,为
ViewPager生成TestFragmento
Samplexxx.java,全部的indicator的显示,一个类显示一种运用方
法或特性
2)运用viewpager结合ViewPagelndicator进行新闻类别的分类切换,可点击切
换也可以滑动切换。
3)运用Gson对新闻数据的json字符串进行解析显示到listview上
须要运用jar包
fastjson或gson这两个jar包。
//Gson的运用方式Gsongson=newGson();String
str=ReadAssets(this,"json_ss");//this当前类,"json_ss"须要解析的文件名
UserMessageuserMessage=gson.fromJson(str,UserMessage.class);〃须要解
析的json文件最外层类名//fastjson的运用方法String
json=ReadAssets(this,"json_h");UserMessageuser=
JSON.parseObject(jsor),UserMessage.class);
自己扩展
4)运用Universal-Image-Loader对图片进行缓存加载
Android上最让人头疼的莫过于从网络获得图片、显示、回收,任何一个环节有
问题都可能干脆00M,这个项目或许能帮到你。UniversalImageLoaderfor
Android的目的是为了实现异步的网络图片加载、缓存及显示,支持多线程异步
加载。它最初来源于FedorVlasov的项目,且自此之后,经过大规模的重构和
改进。
特性列举:
多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及
drawable中等
支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬
盘缓存策略,图片显示选项以及其他的一些配置
支持图片的内存缓存,文件系统缓存或者SD卡缓存
支持图片下载过程的监听
依据控件(ImageView)的大小对Bitmap进行裁剪,削减Bitmap占用过多的内存
较好的限制图片的加载过程,例如暂停图片加载,重新起先加载图片,一般运用
在ListView,GhdView中,滑动过程中暂停加载图片,停止滑动的时候去加载图
片
供应在较慢的网络下对图片进行加载
运用过程:
创建默认的ImageLoader,全部的操作都由ImageLoader限制。该类运用单例
设计模式,所以假如要获得该类的实力,须要调用getlnstance。方法。在运用
ImageLoader显示图片之前,你首先要初始化它的配置,调用
ImageLoaderConfiguration的ir)it()方法,然后你就可以实现各种的显示了。
Uava]日圆CP
01.〃创建默认的ImageLoader酉己置参数
02.ImageLoaderConfigurationconfiguration=ImageLoaderConfiguration
03..createDefault(this);
04.//InitializeImageLoaderwithconfiguration.
05.ImageLoader.getlnstance().init(configuration);
自定义配置imageloader,就像你已经知道的,首先,你须要运用
ImageLoaderConfiguration对象来初始化ImageLoader□由于ImageLoader是单
例,所以在程序起先的时候只须要初始化一次就好了。建议你在Activity的
onCreate()方法中初始化。假如一个ImageLoader已经初始化过,再次初始化
不会有任何效果。下面我们通过ImageLoaderConfiguration.Builder创建一个
设置
Uava]B耸CP
01.FilecacheDir=StorageUtils.getOwnCacheDirectory(this"imageloader/Cache");
02.ImageLoaderConfigurationconfig=newImageLoaderConfiguration
03..Builder(this)
04..memoryCacheExtraOptions(480J800)//maxwidth,maxheight,即保存的每个缓存文件的最
大长宽
05..threadPoolSize(3)〃线程池内加载的数里
06..threadPriority(Thread.NORM_PRIORITY-2)
07..denyCacheImageMultipleSizesInMemory()
88..memoryCache(newUsingFreqLimitedKemoryCache(2*1024*1024))//Youcanpassyou
你可以通过自己的内存缓存实现
09..memoryCacheSize(2*1024*1024)
10..discCacheSize(50*1024♦1024)
11.・discCacheFileNameGenRr'ator*(newMd5FilRNafnRGenerator())〃将保存的时假的UR1名称用
MD5加密
12..tasksProcessingOrder(QueueProcessingType.LIFO)
13..discCacheFileCount(100)〃缓存的文件数里
14..discCache(newUnlimitedDiscCache(cacheDir))〃自定义缓存路径
15..defaultDisplaylmageOptions(DisplaylmageOptions.createSimple())
16..imageDownloader(newBaseImageDownloader(this?5*1000,30*1800))//connectTin
超时时间
17..writeDebugLogs()//Removeforreleaseapp
18..build();〃开始构建
19.ImageLoader.getlnstance().init(config);
得至UimageLoader
[java]fci0CE
01.ImageLoaderimageLoaderimageLoader=ImageLoader.getlnstance();
运用过程:
(1)图像操作是否参与缓存以及图像效果的配置操作
[java]tiLiCF
01.DisplayImageOptionsoptions■newDisplaylrrageOptions.Builder()
92..showImageOnLoading(R.drawable.ic_stub)〃加载图片时的图片
03..showImageForEmptyUri(R.drawable.ic_empty)〃设有图片资源时的默认图片
04..sho«IiriageOnFail(R.drawable.ic_error)〃加载失败时蹈片
65..cachelnMemory(true)〃启用内存缓存
06..cacheOnDisk(true)〃启用外存缓存
07..considerExifParams(true)〃启用EXIF和JPE溷像格式
08..displayer(newRoundedBitmapDisplayer(20))〃设置显示风格这里是圆角矩形
09..build();
DisplayImageOptions以下是全部默认配置参数依据需求可以自定义配置
□avalm◎C产
01.privateintimageResOnLoading■Q;
02.privateintimageResForEmptyUri-0;
03.privateintimageResOnFail=0;
04.privateDrawableimageOnLoading=null;
05.privateDrawableimageForEmptyUri=null;
06.privateDrawableimageOnFail-null;
07.privatebooleanresetViewBeforeLoading»false;
08.privatebooleancachelnMemory=false;
09.privatebooleancacheOnDisk=false;
10.privateImageScaleTypeimageScaleType=ItrageScaleType.IN_SAMPLE_POWER_OF_2;
11.privateOptionsdecodingOptions-newOptions();
12.privateintdelayBeforeLoading«6;
13.privatebooleanconsiderExifParams=false;
14,privateObjectextraForDownloader=null;
15.privateBitmapProcessorpreProcessor=null;
16.privateBitmapProcessorpostprocessor■null;
17.privateBitmapDisplayerdisplayer«DefaultConfigurationFactory.createBitmapDisplayer();
18.privateHandlerhandler=null)
19.privatebooleanisSyncLoading=false;
(2)图片加载监听器在这里吧可以设置加载时的动画或者进度条之类的东西这
国acy
ei.ImageLoadingListeneranimateFirstListener=newAnimateFirstDisplayListener();
62.privatestaticclassAnimateFirstDisplayListenerextendsSimplelrrageLoadingListener{
03.staticfinalList<String>displayedltnages=Collections.synchronizedList(newLinked
List<String>());
04.(QOverride
05.publicvoidonLoadingCompleteCStringimagellri,Viewview,Bitmaploadedlmage){
06.if(loadedlmage!-null){
07.ImageviewimageView=(ImageView)view;
08.booleanfirstDisplay"!displayedlmages.contains(imageUri);
09.if(firstDisplay)<
10.FadelnBitirapDisplayer.animate(imageView,500);
11.displayedlmages.add(imageUri);
12.
13.
14.
里6
(3)简洁设置就可以给ImageView添加图片了
[java]0CE
01.imageLoader.displayIrage(iffageUrl,imageview,options,animateFirstListener);
对于本地的图片,在其确定地址前面要加入""。网络图片就干脆写路径了。
缓存的清理:
缓存的清理可以按需求来定,可以再每个Activity的生命周期函数onDestroy
中清理也可以单独设置让用户自行清理。
[java]ka0CE
01.@Override
02.publicvoidonDestroy(){
03.super.onDestroy();
04.imageLoader.clearMemoryCache();
05.imageLoader.clearDiskCache();
06.}
GirdView,ListView加载图片:
信任大部分人都是运用GridView,ListView来显示大量的图片,而当我们快速
滑动GridView,ListView,我们希望能停止图片的加载,而在GridView,ListView
停止滑动的时候加载当前界面的图片,这个框架当然也供应这个功能,运用起来
也很简洁,它供应了PauseOnScrollListener这个类来限制ListView,GridView
滑动过程中停止去加载图片,该类运用的是代理模式
[java]60CE
01.listView.setOnScrollListener(newPauseOnScrollListener(imageLoader,pauseOnScroll,pauseOnF
ling));
02.gridview.setOnScrollListener(newPauseOnScrollListener(imageLoader,pauseOnScroll,pauseOnF
ling));
第一个参数就是我们的图片加载对象ImageLoader,其次个是限制是否在滑动
过程中暂停加载图片,假如须要暂停传true就行了,第三个参数限制猛的滑动
界面的时候图片是否加载
概要设计
Json数据的一些返回参数
名称类型说明
error_codeint返回《马
reasonstring返回说明
resultstring返回结果集
titlestring新闻标题
contentstring新闻摘要内容
img_widthstring图片宽度
full_titlestring完整标题
pdatestring发布时间
srcstring新闻来源
img_lengthstring图片高度
imgstring图片链接
urlstring新闻链接
pdate_srcstring发布完整时间
三、系统实现
代码1:
packagecom.name,xinwen;
importcom.thinkland.sdk.android.JuheSDKInitializer;
importandroid,app.Application;
importandroid,content.Context;
importandroid,os.Handler;
importandroid,os.Looper;
/**
*@应用程序的入口
*/
publicclassBaseApplicationextendsApplication{
privatestaticContextmContext;
privatestaticThreadmMainThread;
privatestaticintmMainThreadld;
privatestaticHandlerinMainThreadHand1er;
privatestaticLoopermMainThreadLooper;
©Override
publicvoidonCreate(){
super.onCreate();
JuheSDKInitializer.initialize(getApplicationContext());
〃在应用程序入口供应全局的工具
〃上下文
mContext=this;
〃主线程和子线程
mMainThread=Thread.currentThreadO;
//mMainThreadId=mMainThread.getldO;
〃当前应用程序进程ID
//mMainThreadId=android,os.Process.myPidO;
〃线程idmyTidO;
mMainThreadld=android,os.Process.myTidO;
〃用户idmyUidO;
〃主线程handler
mMainThreadHandler=newHandler();
mMainThreadLooper=getMainLooper();
)
publicstaticContextgetContext(){
returnmContext;
}
publicstaticThreadgetMainThread(){
returnmMainThread;
)
publicstaticintgetMainThreadld(){
returnmMainThreadld;
}
publicstaticHandlergetMainThreadllandler(){
returnmMainThreadHandler;
}
publicstaticLoopergetMainThreadLooper(){
returnmMainThreadLooper;
)
)
packagecom.name,xinwen;
importcom.thinkland.sdk.android.JuheSDKInitializer;
importandroid,app.Application;
importandroid,content.Context;
importandroid,os.Handler;
importandroid,os.Looper;
/**
*@应用程序的入口
*/
publicclassBaseApplicationextendsApplication{
privatestaticContextmContext;
privatestaticThreadmMainThread;
privatestaticintmMainThreadld;
privatestaticHandlermMainThreadllandler;
privatestaticLoopermMainThreadLooper;
©Override
publicvoidonCreate(){
super.onCreate();
JuheSDKInitializer.initialize(getApplicationContext());
〃在应用程序入口供应全局的工具
〃上下文
mContext=this;
〃主线程和子线程
mMainThread=Thread.currentThreadO;
//mMainThreadld=mMainThread.getld();
〃当前应用程序进程ID
//mMainThreadld=android,os.Process.myPidO;
〃线程idmyTidO;
mMainThreadld=android,os.Process.myTidO;
〃用户idmyUidO;
〃主线程handler
mMainThreadHand1er=newHandler();
mMainThreadLooper=getMainLooper();
publicstaticContextgetContext(){
returnmContext;
)
publicstaticThreadgetMainThreadO{
returnmMainThread;
}
publicstaticintgetMainThreadld(){
returnmMainThreadld;
)
publicstaticHandlergetMainThreadlland1er(){
returnmMainThreadHandler;
}
publicstaticLoopergetMainThreadLooper(){
returnmMainThreadLooper;
)
)
代码2:
/*
*Copyright(C)2023AndreasStuetz<andreas.>
*
*LicensedundertheApacheLicense,Version2.0(the"License");
*youmaynotusethisincompliancewiththeLicense.
*YoumayobtainacopyoftheLicenseat
*
*
*
*Unlessrequiredbyapplicablelaworagreedtoinwriting,software
*distributedundertheLicenseisdistributedonan〃ASIS〃BASIS,
*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
*SeetheLicenseforthespecificlanguagegoverningpermissionsand
*limitationsundertheLicense.
*/
packageorg.xinwen.indicator,lib;
importandroid,annotation.SuppressLint;
importandroid,content.Context;
importandroid,content,res.TypedArray;
importandroid,graphics.Canvas;
importandroid,graphics.Paint;
importandroid,graphics.Paint.Style;
importandroid,graphics.Typeface;
importandroid,os.Build;
importandroid,os.Parcel;
importandroid,os.Parcelable;
importandroid,support.v4.view.ViewPager;
importandroid,support.v4.view.ViewPager.OnPageChangeListener;
importandroid,util.AttributeSet;
importandroid,util.DisplayMetrics;
importandroid,util.TypedValue;
importandroid,view.Gravity;
importandroid,view.View;
importandroid,view.ViewTreeObserver.OnGlobalLayoutListener;
importandroid,widget.HorizontalScrollView;
importandroid,widget.ImageButton;
importandroid,widget.LinearLayout;
importandroid,widget.TextView;
importjava.util.Locale;
importorg.itheima51.indicator,lib.R;
publicclassTabSlidinglndicatorextendsHorizontalScrolIView
publicinterfaceIconTabProvider
(
publicintgetPagelconResId(intposition);
//©formatter:off
privatestaticfinalint[]ATTRS=newint[]{
android.R.attr.textSize,
android.R.attr.textColor
};
//©formatter:on
privateLinearLayout.LayoutParamsdefaultTabLayoutParams;
privateLinearLayout.LayoutParamsexpandedTabLayoutParams;
privatefinalPageListenerPageListener=new
PageListener();
publicOnPageChangeListenerdelegatePageListener;
privateLinearLayouttabsContainer;
privateViewPagerpager;
privateinttabCount;
privateintcurrentPosition=0;
privatefloatcurrentPositionOffset=Of;
privatePaintrectPaint;
privatePaintdividerPaint;
privateintindicatorColor=0xFF666666;
privateintunderlineColor=OxlAOOOOOO;
privateintdividerColor=OxlAOOOOOO;
privatebooleanshouldExpand=false;
privatebooleantextAlICaps-true;
privateintscrolloffset-52;
privateintindicatorHeight=8;
privateintunderlineHeight-2;
privateintdividerPadding=12;
privateinttabPadding=24;
privateintdividerWidth=1;
privateinttabTextSize=12;
privateinttabTextColor=0xFF666666;
privateinttabNormalTextColor=0xFF666666;
privateinttabSelectedTextColor=OxFFFFOOOO;
privateTypefacetabTypeface=null;
privateinttabTypefaceStyle-
Typeface.BOLD;
privateintlastScrollX=0;
privateinttabBackgroundResId=
R.drawable.background_tab;
privateLocalelocale;
publicTabSlidinglndicator(Contextcontext){
this(context,null);
publicTabSlidinglndicator(Contextcontext,AttributeSetattrs){
this(context,attrs,0);
publicTabSlidinglndicator(Contextcontext,AttributeSetattrs,int
defStyle){
super(context,attrs,defStyle);
setFillViewport(true);
setWiHNotDraw(false);
tabsContainer=newLinearLayout(context);
tabsContainer.setOrientation(LinearLayout.HORIZONTAL);
tabsContainer.setLayoutParams(new
LayoutParams(LayoutParams.MATCHPARENT,LayoutParams.MATCH_PARENT));
addView(tabsContainer);
DisplayMetricsdm=getResources().getDisplayMetrics();
scrollOffset=(int)
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,scrollOffset,dm);
indicatorHeight二(int)
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,indicatorHeight,dm);
underlineHeight二(int)
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,underlineHeight,dm);
dividerPadding=(int)
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dividerPadding,dm);
tabPadding二(int)
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,tabPadding,dm);
dividerWidth=(int)
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dividerWidth,dm);
tabTextSize=(int)
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,tabTextSize,dm);
//getsystemattrs(android:textSizeandandroid:textColor)
TypedArraya=context.obtainStyledAttributes(attrs,ATTRS);
tabTextSize=a.getDimensionPixelSize(0,tabTextSize);
tabTextColor二a.getColor(1,tabTextColor);
a.recycle();
//getcustomattrs
a=context.obtainStyledAttributes(attrs,
R.styleable.TabSlidinglndicator);
indicatorColor=
a.getColor(R.styleable.TabSlidingIndicator_pstsIndicatorColor,
indicatorColor);
underlineColor=
a.getColor(R.styleable.TabSlidingIndicator_pstsUnderlineColor,
underlineColor);
dividerColor=
a.getColor(R.styleable.TabSlidingIndicator_pstsDividerColor,dividerColor);
indicatorHeight=
a.getDimensionPixelSize(R.styleable.TabSlidinglndicatorpstsIndicatorHeight,
indicatorHeight);
underlineHeight=
a.getDimensionPixelSize(R.styleable.TabSlidingIndicator_pstsUnderlineHeight,
underlineHeight);
dividerPadding=
a.getDimensionPixelSize(R.styleable.TabSlidingIndicator_pstsDividerPadding,
dividerPadding);
tabPadding二
a.getDimensionPixelSize(R.styleable.TabSlidingIndicator_pstsTabPaddingLeftR
ight,tabPadding);
tabBackgroundResId=
a.getResourceId(R.styleable.TabSlidingIndicator_pstsTabBackground,
tabBackgroundResId);
shouldExpand二
a.getBoolean(R.styleable.TabSlidingIndicator_pstsShouldExpand,
shouldExpand);
scrollOffset=
a.getDimensionPixelSize(R.styleable.TabSlidingIndicator_pstsScrollOffset,
scrollOffset);
textAlICaps二
a.getBoolean(R.styleable.TabSlidingIndicator_pstsTextAlICaps,textAHCaps);
a.recycle();
rectPaint=newPaint();
rectPaint.setAntiAlias(true);
rectPaint.setStyle(Style.FILL);
dividerPaint=newPaint();
dividerPaint.setAntiAlias(true);
dividerPaint.setStrokeWidth(dividerWidth);
defaultTabLayoutParams=new
LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.MATCH_PARENT);
expandedTabLayoutParams=newLinearLayout.LayoutParams(0,
LayoutParams.MATCH_PARENT,1.Of);
if(locale==null)
(
locale=getResourcesO.getConfigurationO.locale;
}
)
publicvoidsetViewPager(ViewPagerpager)
(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年巧妙辨析中考英语易混淆动词教学设计
- 北师大版数学八年级下册1.3.2 三角形三边的垂直平分线 教案
- 三年级下册数学人教版奥数专讲:解决问题的策略(三)教案
- 分期车贷款合同模板
- 个人供暖合同模板
- 台架装置技术合同模板
- 合同模板借款合同
- 农村厂房代工合同模板
- 企业服装采购合同模板
- 印刷厂职员劳动合同模板
- 2024至2030年中国冷却塔行业深度调研及投资战略分析报告
- 建筑工程中标通知书
- 2024年秋季人教版七年级上册历史全册教学课件新教材
- 健身房合伙协议书
- 人教版数学四年级上册第二单元 公顷和平方千米说课稿
- 2024年辽宁省丹东市第六中学中考二模英语试题(解析版)
- 2024年公司收购合同模板(二篇)
- 机械居间合同范本
- GB 1499.1-2024钢筋混凝土用钢第1部分:热轧光圆钢筋
- 北京市西城区2023-2024学年八年级下学期期末考试语文试题
- 物流运输补充协议书范本
评论
0/150
提交评论