編輯:關於Android編程
Android接口回調方法處處涉及到,比如常用的Button點擊事件就是一個接口回調,可見掌握熟練使用接口回調方法的重要性。
接口回調的簡單解釋就是:比如我這個類實現了一個接口裡的方法doSomething,然後注冊到你這裡,然後我就去做別的事情去了, 你在某個觸發的時機回頭來調用我doSomething的方法。
接口回調一般有兩種寫法,實現形式不一樣,但是具體的內部的實現邏輯是一樣。
直接給出代碼:
方法一:
package com.callbackdemo; import android.graphics.Bitmap; /** * 接口 * * @author zhongyao */ public interface ImageStateInterface { void onImageStart(); void onImageSuccess(Bitmap bitmap); void onImageFailed(); void OnEnd(); }
package com.callbackdemo; import android.annotation.SuppressLint; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; /** * Android 接口回調實例 * * @author zhongyao */ public class MainActivity extends Activity implements ImageStateInterface { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** * 實例化控件 */ onLincoln(); } private void onLincoln() { button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { DownloadImageUtil downloadImageUtil = new DownloadImageUtil(); // 調用StartDownLoad方法,目的是將MainActivity注冊到接口那裡,使接口知道,需要調用的是哪個類中的實現該接口的方法。 downloadImageUtil.StartDownLoad(MainActivity.this, getApplicationContext()); } }); } @Override public void onImageStart() { Log.d("lincoln", "onImageStart"); button.setText("onImageStart"); } @Override public void onImageSuccess(final Bitmap bitmap) { Log.d("lincoln", "onImageSuccess"); runOnUiThread(new Runnable() { @SuppressLint("NewApi") @Override public void run() { button.setText("onImageSuccess"); button.setBackground(new BitmapDrawable(bitmap)); } }); } @Override public void onImageFailed() { } @Override public void OnEnd() { Toast.makeText(MainActivity.this, "哈哈!!", 0).show(); } }
package com.callbackdemo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; /** * 在該類中調用MainActivity已實現的接口中的方法。 * @author zhongyao */ public class DownloadImageUtil { public void StartDownLoad(final ImageStateInterface imageStateInterface, final Context context) { //該imageStateInterface使其得知,是從哪裡注冊過來的,然後根據其來源調用其實現的接口方法。 //如下,此時調用的就是MainActivity.this中實現的onImageStart方法。 imageStateInterface.onImageStart(); new Thread(new Runnable() { @Override public void run() { try { new Thread().sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } Bitmap bitmap = BitmapFactory.decodeResource( context.getResources(), R.drawable.icon); imageStateInterface.onImageSuccess(bitmap); } }).start(); imageStateInterface.OnEnd(); } }
package com.callbackdemo; import android.graphics.Bitmap; /** * 接口 * * @author zhongyao */ public interface ImageStateInterface { void onImageStart(); void onImageSuccess(Bitmap bitmap); void onImageFailed(); void OnEnd(); }
package com.callbackdemo; import android.annotation.SuppressLint; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; /** * Android 接口回調實例 * * @author zhongyao */ public class MainActivity extends Activity{ private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** * 實例化控件 */ onLincoln(); } private void onLincoln() { button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { DownloadImageUtil.StartDownLoad(imageInterface, MainActivity.this); } }); } ImageStateInterface imageInterface = new ImageStateInterface() { @Override public void onImageStart() { Log.d("lincoln", "onImageStart"); button.setText("onImageStart"); } @Override public void onImageSuccess(final Bitmap bitmap) { Log.d("lincoln", "onImageSuccess"); runOnUiThread(new Runnable() { @SuppressLint("NewApi") @Override public void run() { button.setText("onImageSuccess"); button.setBackground(new BitmapDrawable(bitmap)); } }); } @Override public void onImageFailed() { } @Override public void OnEnd() { Toast.makeText(MainActivity.this, "哈哈!!", 0).show(); } }; }
package com.callbackdemo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; /** * 在該類中調用MainActivity已實現的接口中的方法。 * @author zhongyao */ public class DownloadImageUtil { public static void StartDownLoad(final ImageStateInterface imageInterface,final Context context) { imageInterface.onImageStart(); new Thread(new Runnable() { @Override public void run() { try { new Thread().sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon); imageInterface.onImageSuccess(bitmap); } }).start(); imageInterface.OnEnd(); } }
現在新版360手機助手的界面都做得挺漂亮的,在切換底部導航時的波紋效果也很好看,剛好最近看了個開源項目才了解到原來Drawable做動畫效果也怎麼好用,所以就仿照360實
一、前言前面介紹了Android中視頻直播中的一個重要類ByteBuffer,我們開始動手開發了,因為我們後續肯定是需要直播視頻功能,然後把視頻推流到服務端,本地在進行拉
Fragment是安卓v4包的新東西,名為碎片化布局,該布局的目的就是為了取代過時的tabhost.使操作更加方便,大大增加了開發者的高效開發。在使用好Fragment的
360推出了旗下新品手機360 Q5和360 Q5plus,主打安全手機。那麼下面小編來針對Q5和Q5plus的參數對比,給大家一個購機參考。36