0

맞춤보기에서 부모 활동으로 데이터를 전달하는 방법은 무엇입니까? 나는 사용자 정의보기에서 어느 상자의 데이터를 건드렸 는가? 상자에 닿을 때마다 해당 데이터를 상위 액티비티에 전달하고 싶습니다.터치 이벤트 데이터를 사용자 정의보기에서 활동 android로 전달

여기 내 활동 레이아웃입니다 : 1

편집 :

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:visibility="invisible"> 
    <SearchView 
     android:id="@+id/searchView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     > 
    </SearchView> 
</RelativeLayout> 
<com.example.gaurav.dummyapp.FaceOverlayView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/face_overlay" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    /> 

FaceOverlayView.java

공용 클래스 FaceOverlayView가 {

private Bitmap mBitmap; 
private SparseArray<Face> mFaces; 
float left = 0; 
float top = 0; 
float right = 0; 
float bottom = 0; 
double sc; 
private String faceData; 

public FaceOverlayView(Context context) { 
    this(context, null); 
} 

public FaceOverlayView(Context context, AttributeSet attrs) { 
    this(context, attrs, 0); 
} 

public FaceOverlayView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

public void setBitmap(Bitmap bitmap) { 
    mBitmap = bitmap; 
    FaceDetector detector = new FaceDetector.Builder(getContext()) 
      .setTrackingEnabled(true) 
      .setLandmarkType(FaceDetector.ALL_LANDMARKS) 
      .setMode(FaceDetector.ACCURATE_MODE) 
      .build(); 

    if (!detector.isOperational()) { 
     //Handle contingency 
    } else { 
     Frame frame = new Frame.Builder().setBitmap(bitmap).build(); 
     mFaces = detector.detect(frame); 
     detector.release(); 
    } 
    logFaceData(); 
    invalidate(); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    if ((mBitmap != null) && (mFaces != null)) { 
     double scale = drawBitmap(canvas); 
     drawFaceBox(canvas, scale); 

    } 
} 

private double drawBitmap(Canvas canvas) { 
    double viewWidth = canvas.getWidth(); 
    double viewHeight = canvas.getHeight(); 
    double imageWidth = mBitmap.getWidth(); 
    double imageHeight = mBitmap.getHeight(); 
    double scale = Math.min(viewWidth/imageWidth, viewHeight/imageHeight); 
    sc = scale; 
    Rect destBounds = new Rect(0, 0, (int)(imageWidth * scale), (int)(imageHeight * scale)); 
    canvas.drawBitmap(mBitmap, null, destBounds, null); 
    return scale; 
} 

private void drawFaceBox(Canvas canvas, double scale) { 
    //This should be defined as a member variable rather than 
    //being created on each onDraw request, but left here for 
    //emphasis. 
    Paint paint = new Paint(); 
    paint.setColor(Color.GREEN); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeWidth(5); 



    for(int i = 0; i < mFaces.size(); i++) { 
     Face face = mFaces.valueAt(i); 

     left = (float) (face.getPosition().x * scale); 
     top = (float) (face.getPosition().y * scale); 
     right = (float) scale * (face.getPosition().x + face.getWidth()); 
     bottom = (float) scale * (face.getPosition().y + face.getHeight()); 

     canvas.drawRect(left, top, right, bottom, paint); 
    } 
} 

private void drawFaceLandmarks(Canvas canvas, double scale) { 
    Paint paint = new Paint(); 
    paint.setColor(Color.GREEN); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeWidth(5); 

    for(int i = 0; i < mFaces.size(); i++) { 
     Face face = mFaces.valueAt(i); 

     for (Landmark landmark : face.getLandmarks()) { 
      int cx = (int) (landmark.getPosition().x * scale); 
      int cy = (int) (landmark.getPosition().y * scale); 
      canvas.drawCircle(cx, cy, 10, paint); 
     } 

    } 
} 

private void logFaceData() { 
    float smilingProbability; 
    float leftEyeOpenProbability; 
    float rightEyeOpenProbability; 
    float eulerY; 
    float eulerZ; 
    for(int i = 0; i < mFaces.size(); i++) { 
     Face face = mFaces.valueAt(i); 

     smilingProbability = face.getIsSmilingProbability(); 
     leftEyeOpenProbability = face.getIsLeftEyeOpenProbability(); 
     rightEyeOpenProbability = face.getIsRightEyeOpenProbability(); 
     eulerY = face.getEulerY(); 
     eulerZ = face.getEulerZ(); 

     Log.e("Face Detection", "Smiling: " + smilingProbability); 
     Log.e("Face Detection", "Left eye open: " + leftEyeOpenProbability); 
     Log.e("Face Detection", "Right eye open: " + rightEyeOpenProbability); 
     Log.e("Face Detection", "Euler Y: " + eulerY); 
     Log.e("Face Detection", "Euler Z: " + eulerZ); 
    } 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    int action = event.getAction() & MotionEvent.ACTION_MASK; 

    int x = (int) event.getX(); 
    int y = (int) event.getY(); 
    float eulerY; 
    float eulerZ; 
    switch(action) { 
     case MotionEvent.ACTION_DOWN : { 
      for(int i = 0; i < mFaces.size(); i++) { 
       Face face = mFaces.valueAt(i); 

       left = (float) (face.getPosition().x * sc); 
       top = (float) (face.getPosition().y * sc); 
       right = (float) sc * (face.getPosition().x + face.getWidth()); 
       bottom = (float) sc * (face.getPosition().y + face.getHeight()); 

       if((x > left && x < right) && (y > top && y < bottom)){ 
        Log.e("BOX>>>>>>>>>>", String.valueOf(i)); 

       } 
      } 


      break; 
     } 
     case MotionEvent.ACTION_MOVE : { 
      //path.lineTo(event.getX(), event.getY()); 

      break; 
     } 

    } 

    invalidate(); 

    return super.onTouchEvent(event); 
} 
,536보기를 확장 : 다음은 부모 활동의

활동 등급 : 공용 클래스 dummyActivity는 AppCompatActivity를 확장 {

private FaceOverlayView fooView; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dummy); 
    fooView.setBitmap("bitmap"); 
} 

답변

0

난 당신이 부모 활동

box_view.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_UP){ 

      // Do what you want/Get data from view etc... depends what kind of data it is, can you explain more? 
      return true; 
     } 
     return false; 
    } 
}); 

내가 당신을 보유하고있는 상자 안에 텍스트 필드가 생각에 onTouchListenter입니다 필요 생각 정수 값이므로 온 터치 내부에서 수행 할 수 있습니다.

tv_box_1.getText(); 
//To get the text of the box1 (do for tv_box_2.getText) etc... 
//after that just convert to integer 
Integer.parseInt(tv_box_1.getText()); 

다른 방법으로 구현할 수 있습니다. 부모 내부의 터치를 가볍게 두드려보고 ID를 확인하고 처리 할 수있는 몇 가지 ifs를 수행하십시오.

다른 방법으로 쉽게 TextView 내부에 match_parent를 양방향으로 설정하고 onClick을 설정하는 것이 좋습니다. 당신이 정말로 터치가 필요 없다면 이걸 사용해야합니다.

+0

데이터는 두드려진 상자의 정수 값입니다. –

+0

나에게 레이아웃 .xml을 제공하지만, 그것을 편집하고있다. – user2582318

+0

나는 얼굴 탐지를하고있다. 그리고이 상자들은 얼굴 상자 다. 이 상자의 색인을 활동에 전달해야하는 데이터로 사용했습니다. –