版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
基于Android平臺記事本的設計與實現(xiàn)1.設計目的記事本的根本功能就是記事,用戶首先用到的就是文本記事,輸入事務信息以文本的形式展現(xiàn)出來,存儲起來。隨著用戶需求的增加,可能希望用圖形來代替文本來記事,用戶之間翻開記事本,看到圖片就能聯(lián)系自己所記載的事務信息。這樣免去了輸入文字的麻煩,反而會更簡單。又或者是文本與圖片的交叉運用,可以讓用戶自己選擇自己喜歡的記事方式,更加自由與便捷。所以此功能的意義是讓簡單的記事信息能以文本、圖文和視頻表達,更加豐富多彩。2.設計內(nèi)容本設計的根本內(nèi)容是在Android平臺下,設計與實現(xiàn)記事本軟件。具體要實現(xiàn)的功能是:
(1)設計實現(xiàn)添加“文字〞,“圖文〞,“視頻〞這三個主要的功能模塊。(2)進入添加后,有“保存〞,“取消〞兩種選擇。(3)主頁面顯示記事列表,點擊可查看及時內(nèi)容,并有“刪除〞,“返回〞兩種選擇。(4)進行測試并分析結(jié)果。3.開發(fā)環(huán)境的安裝與配置3.1Android開發(fā)平臺搭建本設計主要是以Eclipse為根底,安裝SDK和ADT插件后,用來開發(fā)安卓工程。開發(fā)平臺搭建步驟介紹如下?!?)下載JDK并安裝,安裝后配置環(huán)境變量?!?)下載Eclipse解壓至指定文件夾?!?〕下載SDK后解壓至指定文件夾,翻開SDK目錄,點擊SDKManager安裝開發(fā)安卓工程需要的包?!?〕啟動Eclipse,進入Help—>InstallNewSoftware—>Add,添加ADT插件?!?〕進入Window—>Android—>Browse,選擇SDK安裝目錄。3.2硬件環(huán)境Android設備,如Android或平板電腦,主頻在1Ghz及以上,內(nèi)存為512MB以上,系統(tǒng)版本為Android2.1及以上。本設計使用Android4.4.4的。3.3軟件環(huán)境操作系統(tǒng):windows10IDE:EclipseAndroidSDK集成環(huán)境4.設計主體架構(gòu)4.1src文件夾src文件夾下com.liwenhuan.notepad包下為系統(tǒng)主要Activity類:NotesDB.java是進行數(shù)據(jù)儲存的,通過SQLite保存數(shù)據(jù)。并且用onCreate函數(shù)創(chuàng)立數(shù)據(jù)庫。通過設置兩個按鈕的監(jiān)聽來實現(xiàn)對輸入文本的存儲或退出。MainActivity.java是主Activity,通過設置三個按鈕的監(jiān)聽來實現(xiàn)添加文本、圖文、視頻的記事方式。AddContent.java通過initView方法來判斷記事的方式,實現(xiàn)對文本、圖片、視頻的添加,獲取保存文件的時間。MyAdapter.java是顯示模塊,通過系統(tǒng)提供的Bitmap在記事列表顯示圖片和視頻的縮略圖。SelectAct.java是記事詳情的顯示模塊,通過監(jiān)聽的方法來實現(xiàn)記事的刪除功能。4.2gen文件夾
gen文件夾是工程自動生成的文件夾R.java是工程下各個資源的標識符負責所有資源的索引。
4.3bin文件夾
bin文件夾是編譯后的字節(jié)碼存放的目錄,編譯的過程首先是編譯成為android
java虛擬機文件classes.dex,再打包成APK格式的包。
4.4res文件夾
Res是資源目錄,它包含工程中的資源文件并將其編譯進應用程序中,向此目錄添加資源時,會被R.java自動記錄。res目錄存放所有程序中用到的資源文件?!百Y源文件〞指的資料文件、圖片等。子目錄有:drawable、layout、values。本設計主要用了layout目錄下的布局文件。layout是屏幕布局目錄,activity_main.xml是主界面的布局文件、addcontent.xml是增加數(shù)據(jù)頁面的布局文件、cell.xml是幾個功能按鈕的布局文件、select.xml是顯示記事詳情以及對記事進行操作的布局文件。5.程序設計5.1數(shù)據(jù)存儲之SQLite這個方法在數(shù)據(jù)保存中非常常用,只是它只會被一個程序讀取數(shù)據(jù),不能在不同程序間共享數(shù)據(jù)。//創(chuàng)立數(shù)據(jù)庫publicvoidonCreate(SQLiteDatabasedb){db.execSQL("CREATETABLE"+TABLE_NAME+"("+ID +"INTEGERPRIMARYKEYAUTOINCREMENT,"+CONTENT +"TEXTNOTNULL,"+PATH+"TEXTNOTNULL,"+VIDEO+"TEXTNOTNULL,"+TIME+"TEXTNOTNULL)");}5.2添加文字內(nèi)容當以文本方式記事時,需要對輸入的文字內(nèi)容進行保存。publicvoidinitView(){if(val.equals("1")){//文字c_img.setVisibility(View.GONE);//隱藏v_video.setVisibility(View.GONE);//隱藏 }}publicvoidonClick(Viewv){switch(v.getId()){caseR.id.save:addDB();//添加數(shù)據(jù) finish();//關閉當前Activitybreak;caseR.id.delete: finish();break; }}5.3適配器配置publicclassMyAdapterextendsBaseAdapter{privateContextcontext;privateCursorcursor;privateLinearLayoutlayout;//視圖對象publicMyAdapter(Contextcontext,Cursorcursor){this.context=context;this.cursor=cursor; }@OverridepublicintgetCount(){returncursor.getCount();//返回長度 }@OverridepublicObjectgetItem(intposition){returncursor.getPosition(); }@OverridepubliclonggetItemId(intposition){returnposition; }publicViewgetView(intposition,ViewconvertView,ViewGroupparent){LayoutInflaterinflater=LayoutInflater.from(context);//加載視圖的權(quán)限layout=(LinearLayout)inflater.inflate(R.layout.cell,null);//布局文件TextViewcontenttv=(TextView)layout.findViewById(R.id.list_content);//獲取上面布局文件中的每一個內(nèi)容TextViewtimetv=(TextView)layout.findViewById(R.id.list_time);//查找時間ImageViewimgiv=(ImageView)layout.findViewById(R.id.list_img);//查找圖片ImageViewvideoiv=(ImageView)layout.findViewById(R.id.list_video);//查找視頻cursor.moveToPosition(position);//查詢 Stringcontent=cursor.getString(cursor.getColumnIndex("content"));//獲取具體內(nèi)容 Stringtime=cursor.getString(cursor.getColumnIndex("time"));//獲取時間 Stringurl=cursor.getString(cursor.getColumnIndex("path"));//獲取圖片的縮略圖 Stringurlvideo=cursor.getString(cursor.getColumnIndex("video"));//獲取視頻contenttv.setText(content);//將內(nèi)容傳遞進來timetv.setText(time);//將時間傳遞進來videoiv.setImageBitmap(getVideoThumbnail(urlvideo,200,200,MediaStore.Images.Thumbnails.MICRO_KIND));//在列表顯示視頻縮略圖imgiv.setImageBitmap(getImageThumbnail(url,200,200));//在列表顯示圖片縮略圖returnlayout; }5.4添加圖片和視頻 在本設計中,不僅提供了以文本方式進行記事,還提供了以圖片和視頻方式進行記事。publicvoidinitView(){if(val.equals("2")){//圖片c_img.setVisibility(View.VISIBLE);//顯示v_video.setVisibility(View.GONE);//隱藏Intentiimg=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);//跳轉(zhuǎn)到系統(tǒng)相機phoneFile=newFile(Environment.getExternalStorageDirectory() .getAbsoluteFile()+"/"+getTime()+".jpg");//獲取SD卡絕對路徑iimg.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(phoneFile));//存儲獲取的圖片信息startActivityForResult(iimg,1);//啟動跳轉(zhuǎn)}if(val.equals("3")){c_img.setVisibility(View.GONE);//隱藏v_video.setVisibility(View.VISIBLE);//顯示Intentvideo=newIntent(MediaStore.ACTION_VIDEO_CAPTURE);//跳轉(zhuǎn)到系統(tǒng)信息videoFile=newFile(Environment.getExternalStorageDirectory() .getAbsoluteFile()+"/"+getTime()+".mp4");//獲取SD卡絕對路徑video.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(videoFile));//存儲獲取的video信息startActivityForResult(video,2);//啟動跳轉(zhuǎn)}}//顯示圖片或視頻protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){//TODOAuto-generatedmethodstubsuper.onActivityResult(requestCode,resultCode,data);if(requestCode==1){//圖片Bitmapbitmap=BitmapFactory.decodeFile(phoneFile .getAbsolutePath());//獲取路徑c_img.setImageBitmap(bitmap);//展示內(nèi)容}if(requestCode==2){//視頻v_video.setVideoURI(Uri.fromFile(videoFile));//加載視頻v_video.start();//播放視頻}}5.5獲取圖片和視頻的縮略圖 當我們用圖片或制品進行記事時,在列表中需要顯示其縮略圖,可以用系統(tǒng)提供的Bitmap進行處理。//獲取圖片的縮略圖publicBitmapgetImageThumbnail(Stringuri,intwidth,intheight){ Bitmapbitmap=null;BitmapFactory.Optionsoptions=newBitmapFactory.Options();options.inJustDecodeBounds=true;bitmap=BitmapFactory.decodeFile(uri,options);options.inJustDecodeBounds=false;intbeWidth=options.outWidth/width;intbeHeight=options.outHeight/height;intbe=1;if(beWidth<beHeight){be=beWidth; }else{be=beHeight; }if(be<=0){be=1; }options.inSampleSize=be;bitmap=BitmapFactory.decodeFile(uri,options);bitmap=ThumbnailUtils.extractThumbnail(bitmap,width,height,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);returnbitmap; }//獲取視頻的縮略圖privateBitmapgetVideoThumbnail(Stringuri,intwidth,intheight,intkind){ Bitmapbitmap=null;bitmap=ThumbnailUtils.createVideoThumbnail(uri,kind);bitmap=ThumbnailUtils.extractThumbnail(bitmap,width,height,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);returnbitmap; }5.7詳情頁顯示protectedvoidonCreate(BundlesavedInstanceState){//TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);setContentView(R.layout.select);//加載詳情//(getIntent().getIntExtra(NotesDB.ID,0));s_delete=(Button)findViewById(R.id.s_delete);s_back=(Button)findViewById(R.id.s_back);s_img=(ImageView)findViewById(R.id.s_img);s_video=(VideoView)findViewById(R.id.s_video);s_tv=(TextView)findViewById(R.id.s_tv);notesDB=newNotesDB(this);dbWriter=notesDB.getWritableDatabase();//獲取寫權(quán)限s_back.setOnClickListener(this);s_delete.setOnClickListener(this);//如果圖片為空,那么隱藏,否那么顯示if(getIntent().getStringExtra(NotesDB.PATH).equals("null")){s_img.setVisibility(View.GONE); }else{s_img.setVisibility(View.VISIBLE); }if(getIntent().getStringExtra(NotesDB.VIDEO).equals("null")){s_video.setVisibility(View.GONE); }else{s_video.setVisibility(View.VISIBLE); }s_tv.setText(getIntent().getStringExtra(NotesDB.CONTENT));//加載TextView的文字信息 Bitmapbitmap=BitmapFactory.decodeFile(getIntent().getStringExtra(NotesDB.PATH));//加載圖片信息s_img.setImageBitmap(bitmap);//顯示圖片信息s_video.setVideoURI(Uri .parse(getIntent().getStringExtra(NotesDB.VIDEO)));s_video.start();//播放視頻 }6.測試6.1虛擬設備AVD測試〔1〕主界面顯示如圖6.1所示?!?〕記事頁面顯示如圖6.2所示。圖6.1圖6.2〔3〕記事列表顯示如圖6.3所示。〔4〕記事詳情顯示如圖6.4所示。圖6.3圖6.46.2真機測試將記事本的apk文件導進,安裝后進行測試,測試結(jié)果如下:〔1〕添加好內(nèi)容后,記事本的記事列表顯示如圖6.5所示?!?〕以文本方式添加記事,詳情顯示如圖6.6所示。圖6.5圖6.6〔3〕以圖文方式添加記事,內(nèi)容詳情頁顯示如圖6.7。〔4〕以視頻結(jié)合文字方式添加記事,內(nèi)容詳情頁顯示如圖6.8。圖6.7圖6.87.總結(jié)通過此次設計過程我會到了許多知識,在這個過程中遇到了許多困難,比方SDK和ADT的版本不能兼容,記事本工程可以在虛擬設備中運行,在真機上測試時卻出現(xiàn)了問題,不能讀取圖片和視頻,通過在網(wǎng)上查找資料,發(fā)現(xiàn)是雖然在代碼中對SD卡添加了讀取權(quán)限,但沒有在AndroidMainfest.xml中添加對SD卡的讀取權(quán)限,所以出現(xiàn)了如上的錯誤。通過不斷的發(fā)現(xiàn)問題,總結(jié)問題和解決問題的過程,使我對Android的認識不斷的提高,得到了珍貴的經(jīng)驗。代碼:MainActivity.javapackage;//采用接口方式publicclassMainActivityextendsActivityimplementsOnClickListener{ privateButtontextbtn,imgbtn,videobtn;//聲明三個button privateListViewlv;//創(chuàng)立listview privateIntenti;//通過intent來創(chuàng)立標識 privateMyAdapteradapter; privateNotesDBnotesDB;//數(shù)據(jù)庫對象 privateSQLiteDatabasedbReader;//獲取讀取權(quán)限 privateCursorcursor; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView();//調(diào)用初始化方法 } //初始化 publicvoidinitView(){ lv=(ListView)findViewById(R.id.list);//找id操作 textbtn=(Button)findViewById(R.id.text);//找文字 imgbtn=(Button)findViewById(R.id.img);//找圖片 videobtn=(Button)findViewById(R.id.video);//找視頻 textbtn.setOnClickListener(this);//添加監(jiān)聽事件 imgbtn.setOnClickListener(this); videobtn.setOnClickListener(this); notesDB=newNotesDB(this);//數(shù)據(jù)庫實例化 dbReader=notesDB.getReadableDatabase();//獲取讀取權(quán)限 //獲取記事詳情 lv.setOnItemClickListener(newOnItemClickListener(){ @Override publicvoidonItemClick(AdapterView<?>parent,Viewview, intposition,longid){ cursor.moveToPosition(position); Intenti=newIntent(MainActivity.this,SelectAct.class); i.putExtra(NotesDB.ID, cursor.getInt(cursor.getColumnIndex(NotesDB.ID)));//獲取ID i.putExtra(NotesDB.CONTENT,cursor.getString(cursor .getColumnIndex(NotesDB.CONTENT)));//獲取內(nèi)容 i.putExtra(NotesDB.TIME, cursor.getString(cursor.getColumnIndex(NotesDB.TIME)));//獲取時間 i.putExtra(NotesDB.PATH, cursor.getString(cursor.getColumnIndex(NotesDB.PATH)));//獲取圖片 i.putExtra(NotesDB.VIDEO, cursor.getString(cursor.getColumnIndex(NotesDB.VIDEO)));//獲取視頻 startActivity(i);//跳轉(zhuǎn)到詳情頁 } }); } //添加一個復寫方法 @Override publicvoidonClick(Viewv){ i=newIntent(this,AddContent.class);//實例化操作 switch(v.getId()){ caseR.id.text: i.putExtra("flag","1"); startActivity(i);//跳轉(zhuǎn)至AddContent.java break; caseR.id.img: i.putExtra("flag","2"); startActivity(i); break; caseR.id.video: i.putExtra("flag","3"); startActivity(i); break; } } publicvoidselectDB(){ cursor=dbReader.query(NotesDB.TABLE_NAME,null,null,null,null, null,null); adapter=newMyAdapter(this,cursor); lv.setAdapter(adapter); } @Override protectedvoidonResume(){ super.onResume(); selectDB(); }}NotesDB.javapackage;publicclassNotesDBextendsSQLiteOpenHelper{ publicstaticfinalStringTABLE_NAME="notes";//指定名稱 publicstaticfinalStringCONTENT="content";//內(nèi)容 publicstaticfinalStringPATH="path";//圖片 publicstaticfinalStringVIDEO="video";//視頻 publicstaticfinalStringID="_id";//創(chuàng)立id publicstaticfinalStringTIME="time";//當前保存文本的時間 //復寫一個構(gòu)造方法 publicNotesDB(Contextcontext){ super(context,"notes",null,1);//super返回值〔context,庫名,null,版本號〕 } @Override //創(chuàng)立數(shù)據(jù)庫 publicvoidonCreate(SQLiteDatabasedb){ //創(chuàng)立 db.execSQL("CREATETABLE"+TABLE_NAME+"("+ID +"INTEGERPRIMARYKEYAUTOINCREMENT,"+CONTENT +"TEXTNOTNULL,"+PATH+"TEXTNOTNULL,"+VIDEO +"TEXTNOTNULL,"+TIME+"TEXTNOTNULL)"); } @Override //更新數(shù)據(jù)庫,當前需求,不需要更新 publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){ }}AddContent.javapackage;publicclassAddContentextendsActivityimplementsOnClickListener{ privateStringval;//用于接收MainActivity中的跳轉(zhuǎn)的定義 privateButtonsavebtn,deletebtn; privateEditTextettext; privateImageViewc_img; privateVideoViewv_video;//用來播放視頻 privateNotesDBnotesDB;//創(chuàng)立數(shù)據(jù)庫對象 privateSQLiteDatabasedbWriter; privateFilephoneFile,videoFile; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.addcontent);//綁定視圖 val=getIntent().getStringExtra("flag");//接收完成 savebtn=(Button)findViewById(R.id.save);//尋找id deletebtn=(Button)findViewById(R.id.delete); ettext=(EditText)findViewById(R.id.ettext); c_img=(ImageView)findViewById(R.id.c_img); v_video=(VideoView)findViewById(R.id.c_video); savebtn.setOnClickListener(this);//監(jiān)聽事件 deletebtn.setOnClickListener(this); notesDB=newNotesDB(this);//實例化 dbWriter=notesDB.getWritableDatabase(); initView(); } //判斷是否顯示 publicvoidinitView(){ if(val.equals("1")){//文字 c_img.setVisibility(View.GONE);//隱藏 v_video.setVisibility(View.GONE);//隱藏 } if(val.equals("2")){//圖片 c_img.setVisibility(View.VISIBLE);//顯示 v_video.setVisibility(View.GONE);//隱藏 Intentiimg=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);//跳轉(zhuǎn)到系統(tǒng)相機 phoneFile=newFile(Environment.getExternalStorageDirectory() .getAbsoluteFile()+"/"+getTime()+".jpg");//獲取SD卡絕對路徑,照片儲存在SD卡中,數(shù)據(jù)庫中只存儲路徑 iimg.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(phoneFile));//存儲獲取的圖片信息 startActivityForResult(iimg,1);//啟動跳轉(zhuǎn) } if(val.equals("3")){ c_img.setVisibility(View.GONE);//隱藏 v_video.setVisibility(View.VISIBLE);//顯示 Intentvideo=newIntent(MediaStore.ACTION_VIDEO_CAPTURE);//跳轉(zhuǎn)到系統(tǒng)信息 videoFile=newFile(Environment.getExternalStorageDirectory() .getAbsoluteFile()+"/"+getTime()+".mp4");//獲取SD卡絕對路徑 video.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(videoFile));//存儲獲取的video信息 startActivityForResult(video,2);//啟動跳轉(zhuǎn) } } @Override publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.save: addDB();//添加數(shù)據(jù) finish();//關閉當前Activity break; caseR.id.delete: finish(); break; } } //添加數(shù)據(jù) publicvoidaddDB(){ ContentValuescv=newContentValues();//實例化 cv.put(NotesDB.CONTENT,ettext.getText().toString());//添加內(nèi)容〔在輸入框中獲取到的〕 cv.put(NotesDB.TIME,getTime());//調(diào)用方法獲取時間并添加 cv.put(NotesDB.PATH,phoneFile+"");//將獲取的圖片信息插入數(shù)據(jù)庫中 cv.put(NotesDB.VIDEO,videoFile+"");//將獲取的vedio信息插入數(shù)據(jù)庫中 dbWriter.insert(NotesDB.TABLE_NAME,null,cv);//將上面添加的數(shù)據(jù)插入數(shù)據(jù)庫中 } //獲取保存文件時的時間 privateStringgetTime(){ SimpleDateFormatformat=newSimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); DatecurDate=newDate(); Stringstr=format.format(curDate);//按指定的格式獲取時間 returnstr; } @Override protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ //TODOAuto-generatedmethodstub super.onActivityResult(requestCode,resultCode,data); if(requestCode==1){//圖片 Bitmapbitmap=BitmapFactory.decodeFile(phoneFile .getAbsolutePath());//獲取路徑 c_img.setImageBitmap(bitmap);//展示內(nèi)容 } if(requestCode==2){//視頻 v_video.setVideoURI(Uri.fromFile(videoFile));//加載視頻 v_video.start();//播放視頻 } }}MyAdapter.javapackage;publicclassMyAdapterextendsBaseAdapter{ privateContextcontext; privateCursorcursor; privateLinearLayoutlayout;//視圖對象 //構(gòu)造方法 publicMyAdapter(Contextcontext,Cursorcursor){ this.context=context; this.cursor=cursor; } @Override publicintgetCount(){ returncursor.getCount();//返回長度 } @Override publicObjectgetItem(intposition){ returncursor.getPosition(); } @Override publiclonggetItemId(intposition){ //TODOAuto-generatedmethodstub returnposition; } publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ LayoutInflaterinflater=LayoutInflater.from(context);//加載試圖的權(quán)限 layout=(LinearLayout)inflater.inflate(R.layout.cell,null);//布局文件 TextViewcontenttv=(TextView)layout.findViewById(R.id.list_content);//獲取上條布局文件中的每一個內(nèi)容 TextViewtimetv=(TextView)layout.findViewById(R.id.list_time);//顯示時間 ImageViewimgiv=(ImageView)layout.findViewById(R.id.list_img);//顯示圖片 ImageViewvideoiv=(ImageView)layout.findViewById(R.id.list_video);//顯示視頻 cursor.moveToPosition(position);//查詢 Stringcontent=cursor.getString(cursor.getColumnIndex("content"));//承載查詢到的具體內(nèi)容 Stringtime=cursor.getString(cursor.getColumnIndex("time"));//獲取時間 Stringurl=cursor.getString(cursor.getColumnIndex("path"));//獲取圖片的縮略圖 Stringurlvideo=cursor.getString(cursor.getColumnIndex("video"));//獲取視頻 contenttv.setText(content);//將內(nèi)容傳遞進來 timetv.setText(time);//將時間傳遞進來 videoiv.setImageBitmap(getVideoThumbnail(urlvideo,200,200, MediaStore.Images.Thumbnails.MICRO_KIND));//在列表顯示視頻縮略圖imgiv.setImageBitmap(getImageThumbnail(url,200,200));//在列表顯示圖片縮略圖 returnlayout; } //獲取圖片的縮略圖 publicBitmapgetImageThumbnail(Stringuri,intwidth,intheight){ Bitmapbitmap=null; BitmapFactory.Optionsoptions=newBitmapFactory.Options(); options.inJustDecodeBounds=true; bitmap=BitmapFactory.decodeFile(uri,options); options.inJustDecodeBounds=false; intbeWidth=options.outWidth/width; intbeHeight=options.outHeight/height; intbe=1; if(beWidth<beHeight){ be=beWidth; }else{ be=beHeight; } if(be<=0){ be=1; } options.inSampleSize=be; bitmap=BitmapFactory.decodeFile(uri,options); bitmap=ThumbnailUtils.extractThumbnail(bitmap,width,height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); returnbitmap; } //獲取視頻的縮略圖 privateBitmapgetVideoThumbnail(Stringuri,intwidth,intheight,intkind){ Bitmapbitmap=null; bitmap=ThumbnailUtils.createVideoThumbnail(uri,kind); bitmap=ThumbnailUtils.extrac
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025江西建筑安全員知識題庫及答案
- 2025年河北省安全員知識題庫及答案
- 廣州珠江職業(yè)技術(shù)學院《電視節(jié)目編輯》2023-2024學年第一學期期末試卷
- 2025江西省建筑安全員C證考試(專職安全員)題庫附答案
- 廣州應用科技學院《人居環(huán)境設計》2023-2024學年第一學期期末試卷
- 2025湖南省建筑安全員C證考試(專職安全員)題庫及答案
- 施工合同條款修改版
- 2025江蘇省安全員B證考試題庫附答案
- 2025山東建筑安全員A證考試題庫
- 中醫(yī)養(yǎng)生之道(講座)
- 開工復工第一課
- 安徽省淮南市鳳臺縣基層診所醫(yī)療機構(gòu)衛(wèi)生院社區(qū)衛(wèi)生服務中心村衛(wèi)生室地址信息
- 旅游服務禮儀說課市公開課金獎市賽課一等獎課件
- 【線性代數(shù)自考練習題】滇西應用技術(shù)大學專升本真題匯總(附答案解析)
- 英語北京版四年級(上冊)單詞匯總
- 組織知識清單
- 教育人力資源管理
- 上海市金山區(qū)2021-2022學年九年級上學期期末學情診斷(一模)語文試題(PDF打印版,含答案解析)
- 品質(zhì)異常處理單
- 2019年國考行測真題完整版答案解析圖文(地市級)word版
- 市政基礎設施工程給水排水管道工程實體質(zhì)量檢查記錄
評論
0/150
提交評論