編輯:關於Android編程
從Android3.0開始,Android SDK提供了Loader技術,使用Loader技術可以很容易進行數據的異步加載。Loader技術為我們提供的核心類有:
使用Loader一般可以經過以下步驟:
1、初始化Loader,可以使用initLoader(intid, Bundle args, LoaderManager.LoaderCallbacksid:標識Loader的ID,一個Activity或者Fragment只能有一個LoaderManager,但可以有多個Loader,通過ID區 分。在新建Loader時,如果發現已經有相同ID的Loader就會復用該Loader,而不會重新創建。2、實現LoaderManager.LoaderCallbacks中的方法,LoaderManager.LoaderCallbacks中需要實現的方法有:
args:傳給新建Loader的參數。
Callback:回調接口。
3、使用 restartLoader(intid, Bundle args, LoaderManager.LoaderCallbacks
下面一個例子使用CursorLoader查詢聯系人名字,並顯示在ListActivity中,在ActionBar上放置了一個SearchView可以根據聯系人姓名關鍵字查詢聯系人。
Activity代碼如下:
public class MainActivity extends ListActivity implements LoaderManager.LoaderCallbacks, SearchView.OnQueryTextListener { private SimpleCursorAdapter cursorAdapter; private String filterName=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv= (TextView) findViewById(android.R.id.empty); tv.setText("請稍後"); cursorAdapter=new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, null, new String[]{ContactsContract.Contacts.DISPLAY_NAME}, new int[]{android.R.id.text1},0); setListAdapter(cursorAdapter); //初始化Loader getLoaderManager().initLoader(0,null,this); } @Override public Loader onCreateLoader(int id, Bundle args) { Uri uri; String[] pro=new String[]{ ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.Contacts._ID}; if(TextUtils.isEmpty(filterName)){ uri= ContactsContract.Contacts.CONTENT_URI; }else{ uri=Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI,Uri.encode(filterName)); } //創建Loader對象,開始異步加載數據 return new CursorLoader(this,uri,pro, null, null,null); } @Override public void onLoadFinished(Loader loader, Cursor data) { //得到異步加載數據,更新Adapter cursorAdapter.swapCursor(data); } @Override public void onLoaderReset(Loader loader) { //移除adapter使用的Loader,系統會釋放不再使用的Loader cursorAdapter.swapCursor(null); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main,menu); SearchView v= (SearchView) menu.findItem(R.id.menu_search).getActionView(); v.setOnQueryTextListener(this); return true; } @Override public boolean onQueryTextSubmit(String query) { return true; } @Override public boolean onQueryTextChange(String newText) { filterName=newText; //使用新的Loader(清空舊的數據) getLoaderManager().restartLoader(0,null,this); return false; } }
菜單資源文件:
最後來個效果圖:
這一章將重點討論怎麼在應用中加入ffmpeg組件。所有測試都將在 Android Studio工具中進行。測試例子源地址:https://github.com/roman
首先,自定義控件分為三類:自定義的組合控件繼承View的自定義控件繼承ViewGroup的自定義控件在這裡,我要寫的是第二種,也就是繼承自View的自定義控件,第一種自定
在上篇中我們已經實現了相機打開和實時圖像信息的獲取,那麼接下來我們可以嘗試在獲取的圖像信息進行一些處理,然後實時顯示出來,在這裡我們要完成的的幾種處理:灰化、Canny邊
留守公司就剩下幾個人了。我沒有年假故還在堅守。廢話不多說,閒來無事。想練習一下自定義控件的應用以及學習圖片類操作以及處理等等。所以我在網上找了大神文章,鴻洋大神的博客。找