1. 程式人生 > >Android 通過呼叫介面獲取資料

Android 通過呼叫介面獲取資料

最近的開發過程中,遇到這樣一個情況: 製作一個搖桿,使用者按下搖桿後再搖桿範圍內滑動,獲取實時的位置(x,y)來判斷搖桿的狀態和位置,進行相應的邏輯處理。

作為一名菜鳥開發人員,所以還是在網上找很多資料,然後參考其中一個做了,這裡感謝一下網上提供資源的大神。廢話不多說了,直接入正題。

整個過程是這樣的:在搖桿類類中定義一個介面(interface),然後新建一個介面物件並例項化。在需要傳送資料到實現呼叫該類的地方呼叫虛擬函式。這麼說不是很直觀,直接上程式碼了。

RockerView類

public class RockerView extends View{

  ………… …………

中間跟本文無關的內容省略

……………………


@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN|| event.getAction() == MotionEvent.ACTION_MOVE) {
// 當觸屏區域不在活動範圍內
if (Math.sqrt(Math.pow((mRockerBg_X - (int) event.getX()), 2)
+ Math.pow((mRockerBg_Y - (int) event.getY()), 2)) >= mRockerBg_R) {
// 得到搖桿與觸屏點所形成的角度
double tempRad = getRad(mRockerBg_X, mRockerBg_Y, event.getX(),
event.getY());
// 保證內部小圓運動的長度限制
getXY(mRockerBg_X, mRockerBg_Y, mRockerBg_R, tempRad);
} else {// 如果小球中心點小於活動區域則隨著使用者觸屏點移動即可
mRockerBtn_X = (int) event.getX();
mRockerBtn_Y = (int) event.getY();
}
if (mRockerChangeListener != null) {
mRockerChangeListener.report(mRockerBtn_X - mCenterPoint.x,mRockerBtn_Y - mCenterPoint.y); //傳送資料(x,y)到介面


}

} else if (event.getAction() == MotionEvent.ACTION_UP) {
mRockerBtn_X = mCenterPoint.x;
mRockerBtn_Y = mCenterPoint.y;
if (mRockerChangeListener != null) {
mRockerChangeListener.report(0, 0); //傳送資料(x,y)到介面
}
}
return true;
}
 

  //建立介面物件並且例項化
   RockerChangeListener mRockerChangeListener = null;

public void setRockerChangeListener(
RockerChangeListener rockerChangeListener) {
mRockerChangeListener = rockerChangeListener;
}

  //定義介面

public interface RockerChangeListener {
public void report(float x, float y);
}


}

        在Play這個Activity中使用了RockerView類,並實現RockerChangeListener這個介面,需要實現report這個方法。

public class Play extends Activity implemets RockerChangeListener{

private RockerView myrockerView;

          ………… …………

中間跟本文無關的內容省略

……………………

    //獲取從介面傳過來的資料並且打印出來

@Override
public void report(float x, float y) {
Log.e(
TAG, "report x="+x+",report y ="+y);
}

}