这是我的理解。
在StockDrawWave.java中定义接口(自定义的SurfaceView)
public OnTouchCrossListener onTouchCrossListener;
public interface OnTouchCrossListener {
void onTouchCross(Object... data);
}
public void setOnTouchCrossListener(OnTouchCrossListener l) {
this.onTouchCrossListener = l;
}
并调用其方法
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
x= event.getX();
y = event.getY();
- drawWave.onTouchCrossListener.onTouchCross(x,y);
case MotionEvent.ACTION_UP :
mXCross = -1f;
mCrossEnabled = false;
// 重绘
if(myThread!=null && myThread.myHandler != null) {
myThread.myHandler.sendEmptyMessage(0);
}
break;
}
return true;
}
在另外一个类中实现接口,最终实现两个类间的数据传递
mSurfaceView.setOnTouchCrossListener(new StockDrawWave.OnTouchCrossListener() {
@Override
public void onTouchCross(Object... data) {// 此方法在StockDrawWave中子线程中被调用
// 子线程不能直接更新当前主线程的UI。需要开启另外的线程,并利用handler发送消息到主线程
final String xtime = (String)data[0];
final float y = (float)data[1];
App.post(new Runnable() {//
@Override
public void run() {
setTextViewFS(xtime, y, mYesterdayClosePrice);
}
});
// Print.e("xtime,y",xtime + "," + y);
}
});