版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于Android平臺(tái)記事本的設(shè)計(jì)與實(shí)現(xiàn) 1.設(shè)計(jì)目的記事本的基本功能就是記事,手機(jī)用戶首先用到的就是文本記事,輸入事務(wù)信息以文本的形式展現(xiàn)出來,存儲(chǔ)起來。隨著用戶需求的增加,可能希望用圖形來代替文本來記事,用戶之間打開記事本,看到圖片就能聯(lián)系自己所記載的事務(wù)信息。這樣免去了輸入文字的麻煩,反而會(huì)更簡單。又或者是文本與圖片的交叉運(yùn)用,可以讓用戶自己選擇自己喜歡的記事方式,更加自由與便捷。所以此功能的意義是讓簡單的記事信息能以文本、圖文和視頻表達(dá),更加豐富多彩。2.設(shè)計(jì)內(nèi)容本設(shè)計(jì)的基本內(nèi)容是在Android平臺(tái)下,設(shè)計(jì)與實(shí)現(xiàn)記事本軟件。具體要實(shí)現(xiàn)的功能是:(1)設(shè)計(jì)實(shí)現(xiàn)添加“文字”,“圖文”,“
2、視頻”這三個(gè)主要的功能模塊。(2)進(jìn)入添加后,有“保存”,“取消”兩種選擇。(3)主頁面顯示記事列表,點(diǎn)擊可查看及時(shí)內(nèi)容,并有“刪除”,“返回”兩種選擇。(4)進(jìn)行測(cè)試并分析結(jié)果。3.開發(fā)環(huán)境的安裝與配置3.1 Android開發(fā)平臺(tái)搭建本設(shè)計(jì)主要是以Eclipse為基礎(chǔ),安裝SDK和ADT插件后,用來開發(fā)安卓項(xiàng)目。開發(fā)平臺(tái)搭建步驟介紹如下。 (1)下載JDK并安裝,安裝后配置環(huán)境變量。(2)下載Eclipse解壓至指定文件夾。(3)下載SDK后解壓至指定文件夾,打開SDK目錄,點(diǎn)擊SDK Manager安裝開發(fā)安卓項(xiàng)目需要的包。(4)啟動(dòng)Eclipse,進(jìn)入HelpInstall New S
3、oftwareAdd,添加ADT插件。(5)進(jìn)入WindowAndroidBrowse,選擇SDK安裝目錄。3.2硬件環(huán)境Android設(shè)備,如Android手機(jī)或平板電腦,主頻在1Ghz及以上,內(nèi)存為512MB以上,系統(tǒng)版本為Android2.1及以上。本設(shè)計(jì)使用Android4.4.4的手機(jī)。3.3 軟件環(huán)境操作系統(tǒng):windows10IDE:EclipseAndroid SDK 集成環(huán)境4.設(shè)計(jì)主體架構(gòu)4.1 src文件夾src文件夾下com.liwenhuan.notepad包下為系統(tǒng)主要Activity類:NotesDB.java是進(jìn)行數(shù)據(jù)儲(chǔ)存的,通過SQLite保存數(shù)據(jù)。并且用on
4、Create函數(shù)創(chuàng)建數(shù)據(jù)庫。通過設(shè)置兩個(gè)按鈕的監(jiān)聽來實(shí)現(xiàn)對(duì)輸入文本的存儲(chǔ)或退出。MainActivity.java是主Activity,通過設(shè)置三個(gè)按鈕的監(jiān)聽來實(shí)現(xiàn)添加文本、圖文、視頻的記事方式。AddContent.java通過initView方法來判斷記事的方式,實(shí)現(xiàn)對(duì)文本、圖片、視頻的添加,獲取保存文件的時(shí)間。MyAdapter.java是顯示模塊,通過系統(tǒng)提供的Bitmap在記事列表顯示圖片和視頻的縮略圖。SelectAct.java是記事詳情的顯示模塊,通過監(jiān)聽的方法來實(shí)現(xiàn)記事的刪除功能。4.2 gen文件夾gen文件夾是項(xiàng)目自動(dòng)生成的文件夾R.java是工程下各個(gè)資源的標(biāo)識(shí)符負(fù)責(zé)所
5、有資源的索引。4.3 bin文件夾bin文件夾是編譯后的字節(jié)碼存放的目錄,編譯的過程首先是編譯成為androidjava虛擬機(jī)文件classes.dex,再打包成APK格式的包。4.4 res文件夾Res是資源目錄,它包含項(xiàng)目中的資源文件并將其編譯進(jìn)應(yīng)用程序中,向此目錄添加資源時(shí),會(huì)被R.java自動(dòng)記錄。res目錄存放所有程序中用到的資源文件?!百Y源文件”指的資料文件、圖片等。子目錄有:drawable、layout、values。本設(shè)計(jì)主要用了layout目錄下的布局文件。layout是屏幕布局目錄, activity_main.xml是主界面的布局文件、addcontent.xml是增加
6、數(shù)據(jù)頁面的布局文件、cell.xml是幾個(gè)功能按鈕的布局文件、select.xml是顯示記事詳情以及對(duì)記事進(jìn)行操作的布局文件。5.程序設(shè)計(jì)5.1數(shù)據(jù)存儲(chǔ)之SQLite這個(gè)方法在數(shù)據(jù)保存中非常常用,只是它只會(huì)被一個(gè)程序讀取數(shù)據(jù),不能在不同程序間共享數(shù)據(jù)。/創(chuàng)建數(shù)據(jù)庫public void onCreate(SQLiteDatabase db) db.execSQL(CREATE TABLE + TABLE_NAME + ( + ID+ INTEGER PRIMARY KEY AUTOINCREMENT, + CONTENT+ TEXT NOT NULL, + PATH + TEXT NOT NU
7、LL, + VIDEO+ TEXT NOT NULL, + TIME + TEXT NOT NULL);5.2 添加文字內(nèi)容當(dāng)以文本方式記事時(shí),需要對(duì)輸入的文字內(nèi)容進(jìn)行保存。public void initView() if (val.equals(1) / 文字c_img.setVisibility(View.GONE);/隱藏v_video.setVisibility(View.GONE);/隱藏public void onClick(View v) switch (v.getId() case R.id.save:addDB();/添加數(shù)據(jù)finish();/關(guān)閉當(dāng)前Activitybr
8、eak;case R.id.delete:finish();break;5.3適配器配置public class MyAdapter extends BaseAdapter private Context context;private Cursor cursor;private LinearLayout layout;/視圖對(duì)象public MyAdapter(Context context, Cursor cursor) this.context = context;this.cursor = cursor;Overridepublic int getCount() return curs
9、or.getCount();/返回長度Overridepublic Object getItem(int position) return cursor.getPosition();Overridepublic long getItemId(int position) return position;public View getView(int position, View convertView, ViewGroup parent) LayoutInflater inflater = LayoutInflater.from(context);/加載視圖的權(quán)限layout = (Linear
10、Layout) inflater.inflate(R.layout.cell, null);/布局文件TextView contenttv = (TextView) layout.findViewById(R.id.list_content);/獲取上面布局文件中的每一個(gè)內(nèi)容TextView timetv = (TextView) layout.findViewById(R.id.list_time);/查找時(shí)間ImageView imgiv = (ImageView) layout.findViewById(R.id.list_img);/查找圖片ImageView videoiv = (I
11、mageView) layout.findViewById(R.id.list_video);/查找視頻cursor.moveToPosition(position);/查詢String content = cursor.getString(cursor.getColumnIndex(content);/獲取具體內(nèi)容String time = cursor.getString(cursor.getColumnIndex(time);/獲取時(shí)間String url = cursor.getString(cursor.getColumnIndex(path);/獲取圖片的縮略圖String url
12、video = cursor.getString(cursor.getColumnIndex(video);/獲取視頻contenttv.setText(content);/將內(nèi)容傳遞進(jìn)來timetv.setText(time);/將時(shí)間傳遞進(jìn)來videoiv.setImageBitmap(getVideoThumbnail(urlvideo, 200, 200,MediaStore.Images.Thumbnails.MICRO_KIND);/在列表顯示視頻縮略圖imgiv.setImageBitmap(getImageThumbnail(url, 200, 200);/在列表顯示圖片縮略圖
13、return layout;5.4添加圖片和視頻在本設(shè)計(jì)中,不僅提供了以文本方式進(jìn)行記事,還提供了以圖片和視頻方式進(jìn)行記事。public void initView() if (val.equals(2) /圖片c_img.setVisibility(View.VISIBLE);/顯示v_video.setVisibility(View.GONE);/隱藏Intent iimg = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);/跳轉(zhuǎn)到系統(tǒng)相機(jī)phoneFile = new File(Environment.getExternalStorageDire
14、ctory().getAbsoluteFile() + / + getTime() + .jpg);/獲取SD卡絕對(duì)路徑iimg.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(phoneFile);/存儲(chǔ)獲取的圖片信息startActivityForResult(iimg, 1);/啟動(dòng)跳轉(zhuǎn)if (val.equals(3) c_img.setVisibility(View.GONE);/隱藏v_video.setVisibility(View.VISIBLE);/顯示Intent video = new Intent(MediaStore.AC
15、TION_VIDEO_CAPTURE);/跳轉(zhuǎn)到手機(jī)系統(tǒng)信息videoFile = new File(Environment.getExternalStorageDirectory().getAbsoluteFile() + / + getTime() + .mp4);/獲取SD卡絕對(duì)路徑video.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(videoFile);/存儲(chǔ)獲取的video信息startActivityForResult(video, 2);/啟動(dòng)跳轉(zhuǎn)/顯示圖片或視頻protected void onActivityResult(
16、int requestCode, int resultCode, Intent data) / TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if (requestCode = 1) /圖片Bitmap bitmap = BitmapFactory.decodeFile(phoneFile.getAbsolutePath();/獲取路徑c_img.setImageBitmap(bitmap);/展示內(nèi)容if (requestCode = 2) /視頻v_video.set
17、VideoURI(Uri.fromFile(videoFile);/加載視頻v_video.start();/播放視頻5.5 獲取圖片和視頻的縮略圖當(dāng)我們用圖片或制品進(jìn)行記事時(shí),在列表中需要顯示其縮略圖,可以用系統(tǒng)提供的Bitmap進(jìn)行處理。/獲取圖片的縮略圖public Bitmap getImageThumbnail(String uri, int width, int height) Bitmap bitmap = null;BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBo
18、unds = true;bitmap = BitmapFactory.decodeFile(uri, options);options.inJustDecodeBounds = false;int beWidth = options.outWidth / width;int beHeight = options.outHeight / height;int be = 1;if (beWidth beHeight) be = beWidth; else be = beHeight;if (be = 0) be = 1;options.inSampleSize = be;bitmap = Bitm
19、apFactory.decodeFile(uri, options);bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);return bitmap;/獲取視頻的縮略圖private Bitmap getVideoThumbnail(String uri, int width, int height, int kind) Bitmap bitmap = null;bitmap = ThumbnailUtils.createVideoThumbna
20、il(uri, kind);bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);return bitmap;5.7詳情頁顯示protected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.select);/加載詳情/ Syste
21、m.out.println(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 = new Notes
22、DB(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(No
23、tesDB.VIDEO).equals(null) s_video.setVisibility(View.GONE); else s_video.setVisibility(View.VISIBLE);s_tv.setText(getIntent().getStringExtra(NotesDB.CONTENT);/加載TextView的文字信息Bitmap bitmap = BitmapFactory.decodeFile(getIntent().getStringExtra(NotesDB.PATH);/加載圖片信息s_img.setImageBitmap(bitmap);/顯示圖片信息s
24、_video.setVideoURI(Uri.parse(getIntent().getStringExtra(NotesDB.VIDEO);s_video.start();/播放視頻6.測(cè)試6.1虛擬設(shè)備AVD測(cè)試(1)主界面顯示如圖6.1所示。(2)記事頁面顯示如圖6.2所示。圖6.1 圖6.2(3)記事列表顯示如圖6.3所示。(4)記事詳情顯示如圖6.4所示。圖6.3圖6.46.2 真機(jī)測(cè)試將記事本的apk文件導(dǎo)進(jìn)手機(jī),安裝后進(jìn)行測(cè)試,測(cè)試結(jié)果如下:(1)添加好內(nèi)容后,記事本的記事列表顯示如圖6.5所示。(2)以文本方式添加記事,詳情顯示如圖6.6所示。圖6.5圖6.6(3)以圖文方式添
25、加記事,內(nèi)容詳情頁顯示如圖6.7。(4)以視頻結(jié)合文字方式添加記事,內(nèi)容詳情頁顯示如圖6.8。圖6.7圖6.87.總結(jié)通過此次設(shè)計(jì)過程我會(huì)到了許多知識(shí),在這個(gè)過程中遇到了許多困難,比如SDK和ADT的版本不能兼容,記事本項(xiàng)目可以在虛擬設(shè)備中運(yùn)行,在真機(jī)上測(cè)試時(shí)卻出現(xiàn)了問題,不能讀取圖片和視頻,通過在網(wǎng)上查找資料,發(fā)現(xiàn)是雖然在代碼中對(duì)SD卡添加了讀取權(quán)限,但沒有在AndroidMainfest.xml中添加對(duì)手機(jī)SD卡的讀取權(quán)限,所以出現(xiàn)了如上的錯(cuò)誤。通過不斷的發(fā)現(xiàn)問題,總結(jié)問題和解決問題的過程,使我對(duì)Android的認(rèn)識(shí)不斷的提高,得到了寶貴的經(jīng)驗(yàn)。代碼:MainActivity.javapa
26、ckage com.liwenhuan.notepad;/采用接口方式public class MainActivity extends Activity implements OnClickListener private Button textbtn, imgbtn, videobtn;/聲明三個(gè)buttonprivate ListView lv; /創(chuàng)建listviewprivate Intent i;/通過intent來創(chuàng)建標(biāo)識(shí)private MyAdapter adapter;private NotesDB notesDB;/數(shù)據(jù)庫對(duì)象private SQLiteDatabase d
27、bReader;/獲取讀取權(quán)限private Cursor cursor;Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();/調(diào)用初始化方法/初始化public void initView() lv = (ListView) findViewById(R.id.list);/找id操作textbtn = (Button) findViewById(R.id.t
28、ext);/找文字imgbtn = (Button) findViewById(R.id.img);/找圖片videobtn = (Button) findViewById(R.id.video);/找視頻textbtn.setOnClickListener(this); /添加監(jiān)聽事件imgbtn.setOnClickListener(this);videobtn.setOnClickListener(this);notesDB = new NotesDB(this);/數(shù)據(jù)庫實(shí)例化dbReader = notesDB.getReadableDatabase();/獲取讀取權(quán)限/獲取記事詳情
29、lv.setOnItemClickListener(new OnItemClickListener() Overridepublic void onItemClick(AdapterView parent, View view,int position, long id) cursor.moveToPosition(position);Intent i = new Intent(MainActivity.this, SelectAct.class);i.putExtra(NotesDB.ID,cursor.getInt(cursor.getColumnIndex(NotesDB.ID);/獲取
30、IDi.putExtra(NotesDB.CONTENT, cursor.getString(cursor.getColumnIndex(NotesDB.CONTENT);/獲取內(nèi)容i.putExtra(NotesDB.TIME,cursor.getString(cursor.getColumnIndex(NotesDB.TIME);/獲取時(shí)間i.putExtra(NotesDB.PATH,cursor.getString(cursor.getColumnIndex(NotesDB.PATH);/獲取圖片i.putExtra(NotesDB.VIDEO,cursor.getString(cur
31、sor.getColumnIndex(NotesDB.VIDEO);/獲取視頻startActivity(i);/跳轉(zhuǎn)到詳情頁);/添加一個(gè)復(fù)寫方法Overridepublic void onClick(View v) i = new Intent(this, AddContent.class);/實(shí)例化操作switch (v.getId() case R.id.text:i.putExtra(flag, 1);startActivity(i);/跳轉(zhuǎn)至AddContent.javabreak;case R.id.img:i.putExtra(flag, 2);startActivity(i)
32、;break;case R.id.video:i.putExtra(flag, 3);startActivity(i);break;public void selectDB() cursor = dbReader.query(NotesDB.TABLE_NAME, null, null, null, null,null, null);adapter = new MyAdapter(this, cursor);lv.setAdapter(adapter);Overrideprotected void onResume() super.onResume();selectDB();NotesDB.j
33、avapackage com.liwenhuan.notepad;public class NotesDB extends SQLiteOpenHelper public static final String TABLE_NAME = notes;/指定名稱public static final String CONTENT = content;/內(nèi)容public static final String PATH = path;/圖片public static final String VIDEO = video;/視頻public static final String ID = _id;
34、/創(chuàng)建idpublic static final String TIME = time;/當(dāng)前保存文本的時(shí)間/復(fù)寫一個(gè)構(gòu)造方法public NotesDB(Context context) super(context, notes, null, 1);/super返回值(context,庫名,null,版本號(hào))Override/創(chuàng)建數(shù)據(jù)庫public void onCreate(SQLiteDatabase db) /創(chuàng)建db.execSQL(CREATE TABLE + TABLE_NAME + ( + ID+ INTEGER PRIMARY KEY AUTOINCREMENT, + CON
35、TENT+ TEXT NOT NULL, + PATH + TEXT NOT NULL, + VIDEO+ TEXT NOT NULL, + TIME + TEXT NOT NULL);Override/更新數(shù)據(jù)庫,當(dāng)前需求,不需要更新public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) AddContent.javapackage com.liwenhuan.notepad;public class AddContent extends Activity implements OnClickListe
36、ner private String val;/用于接收MainActivity中的跳轉(zhuǎn)的定義private Button savebtn, deletebtn;private EditText ettext;private ImageView c_img;private VideoView v_video;/用來播放視頻private NotesDB notesDB;/創(chuàng)建數(shù)據(jù)庫對(duì)象private SQLiteDatabase dbWriter;private File phoneFile, videoFile;Overrideprotected void onCreate(Bundle s
37、avedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.addcontent);/綁定視圖val = getIntent().getStringExtra(flag);/接收完成savebtn = (Button) findViewById(R.id.save);/尋找iddeletebtn = (Button) findViewById(R.id.delete);ettext = (EditText) findViewById(R.id.ettext);c_img = (ImageView)
38、findViewById(R.id.c_img);v_video = (VideoView) findViewById(R.id.c_video);savebtn.setOnClickListener(this);/監(jiān)聽事件deletebtn.setOnClickListener(this);notesDB = new NotesDB(this);/實(shí)例化dbWriter = notesDB.getWritableDatabase();initView();/判斷是否顯示public void initView() if (val.equals(1) / 文字c_img.setVisibili
39、ty(View.GONE);/隱藏v_video.setVisibility(View.GONE);/隱藏if (val.equals(2) /圖片c_img.setVisibility(View.VISIBLE);/顯示v_video.setVisibility(View.GONE);/隱藏Intent iimg = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);/跳轉(zhuǎn)到系統(tǒng)相機(jī)phoneFile = new File(Environment.getExternalStorageDirectory().getAbsoluteFile() + / +
40、getTime() + .jpg);/獲取SD卡絕對(duì)路徑,照片儲(chǔ)存在SD卡中,數(shù)據(jù)庫中只存儲(chǔ)路徑iimg.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(phoneFile);/存儲(chǔ)獲取的圖片信息startActivityForResult(iimg, 1);/啟動(dòng)跳轉(zhuǎn)if (val.equals(3) c_img.setVisibility(View.GONE);/隱藏v_video.setVisibility(View.VISIBLE);/顯示Intent video = new Intent(MediaStore.ACTION_VIDEO_C
41、APTURE);/跳轉(zhuǎn)到手機(jī)系統(tǒng)信息videoFile = new File(Environment.getExternalStorageDirectory().getAbsoluteFile() + / + getTime() + .mp4);/獲取SD卡絕對(duì)路徑video.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(videoFile);/存儲(chǔ)獲取的video信息startActivityForResult(video, 2);/啟動(dòng)跳轉(zhuǎn)Overridepublic void onClick(View v) switch (v.getId(
42、) case R.id.save:addDB();/添加數(shù)據(jù)finish();/關(guān)閉當(dāng)前Activitybreak;case R.id.delete:finish();break;/添加數(shù)據(jù)public void addDB() ContentValues cv = new ContentValues();/實(shí)例化cv.put(NotesDB.CONTENT, ettext.getText().toString();/添加內(nèi)容(在輸入框中獲取到的)cv.put(NotesDB.TIME, getTime();/調(diào)用方法獲取時(shí)間并添加cv.put(NotesDB.PATH, phoneFile
43、+ );/將獲取的圖片信息插入數(shù)據(jù)庫中cv.put(NotesDB.VIDEO, videoFile + );/將獲取的vedio信息插入數(shù)據(jù)庫中dbWriter.insert(NotesDB.TABLE_NAME, null, cv);/將上面添加的數(shù)據(jù)插入數(shù)據(jù)庫中/獲取保存文件時(shí)的時(shí)間private String getTime() SimpleDateFormat format = new SimpleDateFormat(yyyy年MM月dd日 HH:mm:ss);Date curDate = new Date();String str = format.format(curDate)
44、;/按指定的格式獲取時(shí)間return str;Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) / TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if (requestCode = 1) /圖片Bitmap bitmap = BitmapFactory.decodeFile(phoneFile.getAbsolutePath();/獲取路徑c_img.
45、setImageBitmap(bitmap);/展示內(nèi)容if (requestCode = 2) /視頻v_video.setVideoURI(Uri.fromFile(videoFile);/加載視頻v_video.start();/播放視頻MyAdapter.javapackage com.liwenhuan.notepad;public class MyAdapter extends BaseAdapter private Context context;private Cursor cursor;private LinearLayout layout;/視圖對(duì)象/構(gòu)造方法public
46、MyAdapter(Context context, Cursor cursor) this.context = context;this.cursor = cursor;Overridepublic int getCount() return cursor.getCount();/返回長度Overridepublic Object getItem(int position) return cursor.getPosition();Overridepublic long getItemId(int position) / TODO Auto-generated method stubretur
47、n position;public View getView(int position, View convertView, ViewGroup parent) LayoutInflater inflater = LayoutInflater.from(context);/加載試圖的權(quán)限layout = (LinearLayout) inflater.inflate(R.layout.cell, null);/布局文件TextView contenttv = (TextView) layout.findViewById(R.id.list_content);/獲取上條布局文件中的每一個(gè)內(nèi)容Te
48、xtView timetv = (TextView) layout.findViewById(R.id.list_time);/顯示時(shí)間ImageView imgiv = (ImageView) layout.findViewById(R.id.list_img);/顯示圖片ImageView videoiv = (ImageView) layout.findViewById(R.id.list_video);/顯示視頻cursor.moveToPosition(position);/查詢String content = cursor.getString(cursor.getColumnInd
49、ex(content);/承載查詢到的具體內(nèi)容String time = cursor.getString(cursor.getColumnIndex(time);/獲取時(shí)間String url = cursor.getString(cursor.getColumnIndex(path);/獲取圖片的縮略圖String urlvideo = cursor.getString(cursor.getColumnIndex(video);/獲取視頻contenttv.setText(content);/將內(nèi)容傳遞進(jìn)來timetv.setText(time);/將時(shí)間傳遞進(jìn)來videoiv.setIm
50、ageBitmap(getVideoThumbnail(urlvideo, 200, 200,MediaStore.Images.Thumbnails.MICRO_KIND);/在列表顯示視頻縮略圖imgiv.setImageBitmap(getImageThumbnail(url, 200, 200);/在列表顯示圖片縮略圖return layout;/獲取圖片的縮略圖public Bitmap getImageThumbnail(String uri, int width, int height) Bitmap bitmap = null;BitmapFactory.Options opt
51、ions = new BitmapFactory.Options();options.inJustDecodeBounds = true;bitmap = BitmapFactory.decodeFile(uri, options);options.inJustDecodeBounds = false;int beWidth = options.outWidth / width;int beHeight = options.outHeight / height;int be = 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);return bitmap;/獲取視頻的縮略圖private Bitmap getVideoThumbnail(String uri, int width, int height, i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)安全生產(chǎn)事故處理與整改手冊(cè)(標(biāo)準(zhǔn)版)
- 未來五年垃圾處理、污泥處理處置勞務(wù)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略分析研究報(bào)告
- 企業(yè)知識(shí)產(chǎn)權(quán)保護(hù)與運(yùn)用操作手冊(cè)
- 未來五年新興軟件和新型信息技術(shù)服務(wù)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略分析研究報(bào)告
- 未來五年花卉種苗企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略分析研究報(bào)告
- 未來五年燕麥片企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略分析研究報(bào)告
- 未來五年天然蜂蜜企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略分析研究報(bào)告
- 餐飲衛(wèi)生標(biāo)準(zhǔn)操作流程手冊(cè)
- 會(huì)議組織與實(shí)施指南(標(biāo)準(zhǔn)版)
- 2025年企業(yè)市場營銷策略評(píng)估與優(yōu)化實(shí)施手冊(cè)
- 南昌地鐵培訓(xùn)課件
- GB/T 30104.104-2025數(shù)字可尋址照明接口第104部分:一般要求無線和其他有線系統(tǒng)組件
- 三年級(jí)上冊(cè)數(shù)學(xué)第三單元題型專項(xiàng)訓(xùn)練-判斷題(解題策略專項(xiàng)秀場)人教版(含答案)
- 湖南省婁底市新化縣2024-2025學(xué)年高一上學(xué)期期末考試生物試題(解析版)
- GB/T 45629.1-2025信息技術(shù)數(shù)據(jù)中心設(shè)備和基礎(chǔ)設(shè)施第1部分:通用概念
- 2025年中考?xì)v史開卷考查范圍重大考點(diǎn)全突破(完整版)
- 學(xué)術(shù)誠信與學(xué)術(shù)規(guī)范研究-深度研究
- 《ETF相關(guān)知識(shí)培訓(xùn)》課件
- 2025年云南省普洱市事業(yè)單位招聘考試(833人)高頻重點(diǎn)提升(共500題)附帶答案詳解
- DB15-T 3677-2024 大興安嶺林區(qū)白樺樹汁采集技術(shù)規(guī)程
- 2024年《13464電腦動(dòng)畫》自考復(fù)習(xí)題庫(含答案)
評(píng)論
0/150
提交評(píng)論