国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Android的數(shù)字機(jī)頂盒桌面啟動(dòng)器的設(shè)計(jì)與實(shí)現(xiàn)

2015-09-22 09:29:38李栿麟李璋
物聯(lián)網(wǎng)技術(shù) 2015年9期

李栿麟+李璋

摘 要:以Android為平臺(tái),結(jié)合Android動(dòng)畫技術(shù)和控件顯示等技術(shù),同時(shí)利用Eclipse、Genymotion開發(fā)了一款適用于安卓平臺(tái)的高清數(shù)字機(jī)頂盒的桌面啟動(dòng)器App。

關(guān)鍵詞:Android;Genymotion;Eclipse;數(shù)字機(jī)頂盒啟動(dòng)器

中圖分類號(hào):TP311 ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A ? ? ? ? ? 文章編號(hào):2095-1302(2015)09-00-03

0 ?引 ?言

目前,使用電視機(jī)產(chǎn)品的用戶相比使用個(gè)人電腦的用戶多,但電視機(jī)存在的諸多弊端日益顯現(xiàn),主要體現(xiàn)在分辨率和功能上。Android平臺(tái)的網(wǎng)絡(luò)電視機(jī)目前還處于推廣階段,有很多技術(shù)問題需要解決,也具有廣闊的市場(chǎng)前景。目前,Android平臺(tái)已經(jīng)成為廣大網(wǎng)絡(luò)電視機(jī)廠商的首選操作系統(tǒng),它具有強(qiáng)大的功能并具有很強(qiáng)的開放性,在系統(tǒng)中進(jìn)行網(wǎng)絡(luò)電視機(jī)軟件開發(fā)具有開發(fā)周期短、設(shè)計(jì)自由度高、可擴(kuò)展性強(qiáng)等優(yōu)勢(shì)。為更好地完成機(jī)頂盒與電視機(jī)的互聯(lián),設(shè)計(jì)了此App。

1 ?總體設(shè)計(jì)

1.1 ?總體功能概述

TvLauncher是一款為電視機(jī)或者機(jī)頂盒設(shè)計(jì)的桌面啟動(dòng)器,它列出了機(jī)頂盒的主要功能如電視、電影、教育等主頁面、管理數(shù)字電視所安裝的App的應(yīng)用管理頁面以及查詢相關(guān)人員信息的管理頁面等。

1.2 ?TvLauncher功能模塊的劃分

根據(jù)TvLauncher的總體功能概述,我們可以將TvLauncher劃分為以下幾個(gè)功能模塊來分別實(shí)現(xiàn):

(1)主頁面功能模塊(Home頁面):該模塊主要包括機(jī)頂盒的一些常見的快捷功能選項(xiàng)如電視、電影、娛樂、教育、搜素以及系統(tǒng)設(shè)置和系統(tǒng)更新等。

(2)應(yīng)用管理功能模塊(Application頁面):在該模塊中將會(huì)把系統(tǒng)所有的應(yīng)用分頁顯示在屏幕上,并且提供可供用戶對(duì)這些應(yīng)用操作的一些功能選項(xiàng),如對(duì)應(yīng)用的查看、移動(dòng)和卸載等。

(3)人員信息管理功能模塊(Information頁面)。

2 ?功能設(shè)計(jì)與實(shí)現(xiàn)

2.1 ?UI視圖的設(shè)計(jì)

在該應(yīng)用中,將采用ViewPager+Fragment組合的方式實(shí)現(xiàn)Tab(主頁面和應(yīng)用管理頁面以及人員信息頁面)的分頁和滑動(dòng)的效果,采用ViewPager+Gridview組合的方式實(shí)現(xiàn)對(duì)應(yīng)用管理頁面的App進(jìn)行分頁并實(shí)現(xiàn)滑動(dòng)效果。

2.1.1 ?主頁面的UI設(shè)計(jì)

主頁面的設(shè)計(jì)文件為activity_main_framela yout.xml和activity_main_menu.xml。其中在activity_home_framelayout.xml中采用相對(duì)布局嵌套使用幀布局的方式實(shí)現(xiàn)主頁面圖片和文字的組合,在activity_main_menu.xml中采用在線性布局中嵌套使用線性布局的方式完成Tab的頁面布局。

2.1.2 ?主頁面中電影菜單的二級(jí)頁面UI設(shè)計(jì)

電影菜單的二級(jí)頁面設(shè)計(jì)文件為:activity_movie.xml和movie_viewpager_item.xml。其中在activity_movie.xml中采用線性布局嵌套線性布局的方式實(shí)現(xiàn)該頁面的總體布局,在movie_view pager_item.xml中采用在相對(duì)布局中嵌套使用幀布局的方式實(shí)現(xiàn)圖片和文字的組合。

2.1.3 ?應(yīng)用管理頁面的UI設(shè)計(jì)

應(yīng)用管理頁面的設(shè)計(jì)文件為:application_view pager.xml和application_ viewpager_item.xml文件。其中在app-lication_viewpager.xml文件中采用線性布局相互嵌套+自定義ViewPager控件組合的方式實(shí)現(xiàn)該頁面的總體布局,application_viewpager_item.xml文件中采用在相對(duì)布局中嵌套使用幀布局的方式將系統(tǒng)應(yīng)用的圖標(biāo)、名稱以及背景圖片進(jìn)行組合。

2.1.4 ?應(yīng)用管理模塊二級(jí)功能(移動(dòng)和刪除)頁面的UI設(shè)計(jì)

應(yīng)用管理模塊二級(jí)功能(移動(dòng)和刪除)頁面的設(shè)計(jì)文件為:activity_popupwindow.xml。文件采用在相對(duì)布局中嵌套使用線性布局的方式實(shí)現(xiàn)效果。

2.1.5 ?人員信息查看頁面的UI設(shè)計(jì)

人員信息管理頁面的設(shè)計(jì)文件為:activity_information.xml和information_listview_item.xml。在activity_informa-tion.xml中采用在線性布局中嵌套使用線性布局的方式實(shí)現(xiàn)人員信息界面的總體布局,在information_listview_item.xml文件中采用單純的線性布局方式實(shí)現(xiàn)多組文字的組合效果。

2.2 ?特效的設(shè)計(jì)與實(shí)現(xiàn)

2.2.1 ?主頁菜單焦點(diǎn)放大動(dòng)畫的設(shè)計(jì)與實(shí)現(xiàn)

主頁菜單焦點(diǎn)的放大主要采用Tweened Animation動(dòng)畫中的Scale(縮放效果)類型的動(dòng)畫來實(shí)現(xiàn)。其主要代碼如下:

(1)放大動(dòng)畫的代碼

v.bringToFront();

ScaleAnimation myAnimation_Scale = new ScaleAnimation(1.0f, 1.1f,1.0f, 1.1f, Animation.RELATIVE_TO_SELF, 0.5f,

Animation.RELATIVE_TO_SELF, 0.5f); myAnimation_Scale.setDuration(300);

v.startAnimation(myAnimation_Scale);

myAnimation_Scale.setFillAfter(true);

其中,v.bringToFront();函數(shù)用于把當(dāng)前視圖置于其他視圖上方。

(2)縮小動(dòng)畫的代碼

ScaleAnimation myAnimation_Scale = new ScaleAnimation(1.1f, 1.0f, 1.1f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);

myAnimation_Scale.setDuration(300);

v.startAnimation(myAnimation_Scale);

其實(shí)現(xiàn)的效果圖如圖1所示。

圖1 ?主頁面菜單焦點(diǎn)放大動(dòng)畫實(shí)現(xiàn)效果圖

2.2.2 ?主頁面Tab菜單焦點(diǎn)動(dòng)畫的設(shè)計(jì)與實(shí)現(xiàn)

主頁面Tab菜單焦點(diǎn)動(dòng)畫將主要借助幀動(dòng)畫實(shí)現(xiàn),在文件main_menu_animation.xml中定義了兩幀圖片,間隔時(shí)間為0.3秒。其實(shí)現(xiàn)的主要代碼如下:

(1)獲得焦點(diǎn)代碼

v.setBackgroundResource(R.anim.main_menu_animation);

mFrameAnimation = (AnimationDrawable) v.getBackground();

mFrameAnimation.start();

(2)失去焦點(diǎn)的代碼

v.setBackgroundColor(Color.TRANSPARENT);

其實(shí)現(xiàn)的效果圖如圖2所示。

圖 2 ?主頁面Tab菜單焦點(diǎn)動(dòng)畫實(shí)現(xiàn)效果圖

2.2.3 ?電影菜單二級(jí)菜單的翻頁動(dòng)畫設(shè)計(jì)與實(shí)現(xiàn)

電影菜單二級(jí)菜單的翻頁動(dòng)畫將主要采用ViewPager自帶的setPageTransformer()來設(shè)置切換動(dòng)畫。其實(shí)現(xiàn)的效果如圖3所示。

圖 3 ?電影菜單二級(jí)菜單的翻頁動(dòng)畫實(shí)現(xiàn)效果圖

2.2.4 ?主頁面倒影效果的設(shè)計(jì)與實(shí)現(xiàn)

主頁面倒影效果的主要設(shè)計(jì)思路是:首先獲得需要設(shè)置倒影的View的緩存,然后通過mMatrix.preScale(1,-1)利用該緩存創(chuàng)建一個(gè)和原View一模一樣的圖像 ;調(diào)用Bitmap.createBitmap(originalImage,o,height/2, width,height/2.mMatrix,false)使該圖像倒過來創(chuàng)建一個(gè)倒過來圖像,調(diào)用canvas.drawBitmap(reflectionImage,o,height/3f,null),把倒過來的圖像畫到畫布上。這樣就實(shí)現(xiàn)了倒影效果。其主要代碼如下:

/*為需要設(shè)置倒影的View設(shè)置緩存*/

for (int i = 0; i <reflectNum; i++){

mFrameLayoutReflectArray[i].measure( ? ? ? ? ? ? ? ? ?MeasureSpec.makeMeasureSpec(0,

MeasureSpec.UNSPECIFIED), ? ? ? ? ? ? ? ? ?MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

mFrameLayoutReflectArray[i].layout(0, 0,

mFrameLayoutReflectArray[i].getMeasuredWidth(),mFrameLayoutReflectArray[i].getMeasuredHeight());mFrameLayoutReflectArray[i].buildDrawingCache();mBitmapArray[i] = mFrameLayoutReflectArray[i].getDrawingCache(); }

/*翻轉(zhuǎn)圖片、創(chuàng)建倒過來的圖像、將圖像畫到畫布上*/

finalint reflectionGap = 4;

int width = originalImage.getWidth();

int height = originalImage.getHeight();

Matrix matrix = new Matrix();

matrix.preScale(1, -1);

Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,

height / 2, width, height / 2, matrix, false);

Bitmap bitmapWithReflection = Bitmap.createBitmap(width,

(height + height / 3), Config.ARGB_8888);

// 創(chuàng)建畫布

Canvas canvas = new Canvas(bitmapWithReflection);

canvas.drawBitmap(originalImage, 0, 0, null);

canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

Paint paint = new Paint();

LinearGradient shader = new LinearGradient(0,

originalImage.getHeight(), 0, bitmapWithReflection.getHeight()

+ reflectionGap, 0x70ffffff, 0x00ffffff,

TileMode.MIRROR);paint.setShader(shader);

paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint);return bitmapWithReflection;

其實(shí)現(xiàn)的效果如圖4所示。

圖 4 ?主頁面倒影實(shí)現(xiàn)效果圖

2.2.5 ?應(yīng)用管理頁面的分頁、應(yīng)用的移動(dòng)和卸載的實(shí)現(xiàn)

(1)應(yīng)用管理頁面的分頁的實(shí)現(xiàn)

應(yīng)用管理頁面的分頁將主要采用ViewPager+GridView實(shí)現(xiàn)。利用gridview將應(yīng)用顯示到頁面上,利用ViewPager實(shí)現(xiàn)對(duì)應(yīng)用的分頁以及滑動(dòng)效果。

(2)應(yīng)用的移動(dòng)和卸載的實(shí)現(xiàn)

應(yīng)用管理頁面長(zhǎng)按某一Item,會(huì)彈出popupwindow。此時(shí),如果選擇移動(dòng)(點(diǎn)取消則退回應(yīng)用界面),就記錄應(yīng)用的起始位置positionA,移動(dòng)到positionB,記錄positionB的位置,在List中交換二者的位置,然后更新gridview的Adapter,完成整個(gè)移動(dòng)過程。如果選擇卸載,程序會(huì)彈出一個(gè)確認(rèn)框,選擇確認(rèn)卸載(點(diǎn)取消則退回應(yīng)用界面),程序就獲取該應(yīng)用的packgName,激活系統(tǒng)卸載intent,然后在List中刪除該應(yīng)用,接著更新gridview的Adapter,完成卸載。

3 ?結(jié) ?語

安卓用戶界面設(shè)計(jì)使用的方法是使用XML來描述UI,使用XML來描述的好處是將用戶和程序邏輯分開,可以做到用戶界面的改變不影響程序邏輯,程序邏輯的變動(dòng)也可以不影響用戶界面,實(shí)際上是采用了MVC模式的設(shè)計(jì)。Activity是MVC中的Controller,Activity的ContentView則是MVC中的View。

參考文獻(xiàn)

[1]文璨.Android平臺(tái)網(wǎng)絡(luò)電視機(jī)的桌面系統(tǒng)與功能模塊的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2012.

[2]楊豐盛.Android應(yīng)用開發(fā)揭秘[M].北京:機(jī)械工業(yè)出版社,2010.

[3]李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2011.

[4]張領(lǐng),李根福,王敬杰.Android程序開發(fā)范例寶典[M].北京:人民郵電出版社, 2015.

[5]張榮.Android開發(fā)與應(yīng)用[M].北京:人民郵電出版社,2014.

都安| 巴青县| 莲花县| 北票市| 横峰县| 罗定市| 文昌市| 磐安县| 松阳县| 左权县| 游戏| 荃湾区| 江陵县| 城固县| 方山县| 垣曲县| 临安市| 伊川县| 开江县| 台湾省| 苏州市| 会同县| 新泰市| 铅山县| 甘南县| 容城县| 亳州市| 巩留县| 田林县| 庐江县| 高尔夫| 浪卡子县| 福泉市| 苍南县| 香河县| 东方市| 桃园市| 泰州市| 建瓯市| 兴山县| 滨州市|