package com.xunao.effectdemo.activity; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.res.ResourcesCompat; import android.app.Activity; import android.content.ClipData; import android.content.Intent; import android.os.Bundle; import android.os.SystemClock; import android.util.Log; import android.view.DragEvent; import android.view.HapticFeedbackConstants; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.xunao.effectdemo.R; public class DragActivity extends Activity{ private static final String RED = "RED"; private String selectedContent = ""; private final String correctAnswer = "选项2"; private int wrongNum = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_drag); TextView ll_red = findViewById(R.id.ll_red); TextView tv1 = findViewById(R.id.tv_1); TextView tv2 = findViewById(R.id.tv_2); tv1.setOnLongClickListener(v -> { selectedContent = tv1.getText().toString(); // Intent intent = new Intent(); // ClipData clipData = ClipData.newIntent("label", intent); View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v); v.startDrag(null, shadowBuilder, tv1, 0); //震动反馈 v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); return true; }); tv2.setOnLongClickListener(v -> { selectedContent = tv2.getText().toString(); // Intent intent = new Intent(); // ClipData clipData = ClipData.newIntent("label", intent); View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v); v.startDrag(null, shadowBuilder, tv2, 0); //震动反馈 v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); return true; }); ll_red.setOnDragListener((v, event) -> { String simpleName = v.getClass().getSimpleName(); Log.w(RED, "view name:" + simpleName); int action = event.getAction(); switch (action) { case DragEvent.ACTION_DRAG_STARTED: Log.i(RED, "开始拖拽"); // tv1.setVisibility(View.INVISIBLE); break; case DragEvent.ACTION_DRAG_ENDED: Log.i(RED, "结束拖拽"); // tv1.setVisibility(View.VISIBLE); break; case DragEvent.ACTION_DRAG_ENTERED: Log.i(RED, "拖拽的view进入监听的view时"); break; case DragEvent.ACTION_DRAG_EXITED: Log.i(RED, "拖拽的view离开监听的view时"); break; case DragEvent.ACTION_DRAG_LOCATION: float x = event.getX(); float y = event.getY(); Log.i(RED, "拖拽的view在RED中的位置:x =" + x + ",y=" + y); break; case DragEvent.ACTION_DROP: if(correctAnswer.equals(selectedContent)){ Log.i(RED, "释放拖拽的view"); TextView localState = (TextView) event.getLocalState(); ((ViewGroup) localState.getParent()).removeView(localState); ll_red.setText(selectedContent); ll_red.setBackground(ResourcesCompat.getDrawable(getResources(),R.drawable.drag_success_bg,null)); }else{ wrongNum = wrongNum + 1; if(wrongNum >= 2){ tv2.setBackground(ResourcesCompat.getDrawable(getResources(),R.drawable.drag_hint_bg,null)); } } break; } return true; }); } }