我有一个 Java 文件,其中包含在 Java Activity 中调用的 Java 函数。 但是我不知道如何将一些数据从 Java 函数文件传递到 Java Activity ,以便我可以在应用程序中显示它。
Java函数文件(FaceView.java)中的一些编码
public class FaceView extends View {
private FaceListener mFaceListener;
interface FaceListener {
void handleData(int[] cxArr, int[] cyArr);
}
public void setFaceListener(FaceListener faceListener) {
this.mFaceListener = faceListener;
}
private int cx;
private int cy;
private int[] cxArr;
private int[] cyArr;
private void drawFaceAnnotations(Canvas canvas, double scale) {
for (int i = 0; i < mFaces.size(); ++i) {
Face face = mFaces.valueAt(i);
for (Landmark landmark : face.getLandmarks()) {
cx = (int) (landmark.getPosition().x * scale);
cy = (int) (landmark.getPosition().y * scale);
canvas.drawCircle(cx, cy, 5, paint);
cxArr[i] = cx;
cyArr[i] = cy;
mFaceListener.handleData(cxArr,cyArr);
}
}
}
}
Activity java 文件中的代码 (DisplayActivity.java)
overlay.setFaceListener(new FaceView.FaceListener() {
public void handleData(int[] cxArr, int[] cyArr) {
System.out.println(cxArr[1]+" "+cyArr[1]);
}
});
有人知道如何将数据从 FaceView.java 传递到 DisplayActivity.java 吗? 我尝试了 Intent/bundle ,但似乎不起作用。谢谢
最佳答案
您需要从 View 到 Activity 的回调。
向您的 View 实现添加一个接口(interface),并在需要时调用它:
public class FaceView extends View {
private FaceListener mFaceListener;
interface FaceListener {
public void handleData(Integer[] cxArr, Integer[] cyArr);
}
public void setFaceListener(FaceListener faceListener) {
this.mFaceListener = faceListener;
}
private void drawFaceAnnotations(Canvas canvas, double scale) {
// your code here
// notify listener
List<Integer> cxList = new ArrayList<Integer>();
List<Integer> cyList = new ArrayList<Integer>();
for (int i = 0; i < mFaces.size(); ++i) {
Face face = mFaces.valueAt(i);
for (Landmark landmark : face.getLandmarks()) {
cx = (int) (landmark.getPosition().x * scale);
cy = (int) (landmark.getPosition().y * scale);
canvas.drawCircle(cx, cy, 5, paint);
cxList.add(cx);
cyList.add(cy);
}
}
Integer[] cxArr = cxList.toArray(new Integer[cxList.size()]);
Integer[] cyArr = cyList.toArray(new Integer[cyList.size()]);
mFaceListener.handleData(cxArr,cyArr);
}
}
在您的 Activity 中设置回调/接口(interface):
public class DisplayActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// your code here
FaceView overlay = (FaceView) findViewById(R.id.faceView);
overlay.setFaceListener(new FaceView.FaceListener(){
public void handleData(int[] cxArr, int[] cyArr) {
// TODO: handle faces array here
}
});
}
}
关于java - Android:将数据从 Java 文件传递到 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33375900/