赞
踩
直接上代码,就一个简单的自定义View:
- public class Love extends RelativeLayout {
- private Context mContext;
- float[] num = {-30, -20, 0, 20, 30};//随机心形图片角度
- //记录上一次的点击时间
- private long lastClickTime = 0;
- //点击的时间间隔
- private long INTERVAL = 300;
-
- private static final long SINGLE_CLICK_DELAY = 300; // 单击延时时间
-
- private OnClickListener clickListener; // 外部点击事件监听器
- private Handler handler = new Handler();
- private boolean singleClickPending = false;
-
- private float downX, downY;
-
- public interface OnLoveClickListener {
- void onSingleClick(); // 单击事件回调
-
- void onDoubleClick(); // 双击事件回调
- }
-
- private OnLoveClickListener loveClickListener;
-
- public void setOnLoveClickListener(OnLoveClickListener listener) {
- this.loveClickListener = listener;
- }
-
-
- public Love(Context context) {
- super(context);
- initView(context);
- }
-
- public Love(Context context, @Nullable AttributeSet attrs) {
- super(context, attrs);
- initView(context);
- }
-
- public Love(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- initView(context);
- }
-
- private void initView(Context context) {
- mContext = context;
- clickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- // 默认单击事件处理,可以自行替换为你的逻辑
- if (loveClickListener != null) {
- if (singleClickPending) {
- handler.removeCallbacksAndMessages(null);
- singleClickPending = false;
- } else {
- loveClickListener.onSingleClick();
- }
- }
- }
- };
- }
-
- @Override
- protected void dispatchDraw(Canvas canvas) {
- super.dispatchDraw(canvas);
- }
-
- @Override
- public boolean dispatchTouchEvent(MotionEvent event) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- downX = event.getX();
- downY = event.getY();
- // 获取点击时间
- long currTime = System.currentTimeMillis();
- // 判断点击之间的时间差
- long interval = currTime - lastClickTime;
- lastClickTime = currTime;
- if (interval > 0 && interval < INTERVAL) {
- final ImageView imageView = new ImageView(mContext);
- //设置展示的位置,需要在手指触摸的位置上方,即触摸点是心形的右下角的位置
- LayoutParams params = new LayoutParams(300, 300);
- params.leftMargin = (int) event.getX() - 150;
- params.topMargin = (int) event.getY() - 300;
- //设置图片资源
- ImgLoader.displayWebp(getContext(),R.drawable.main_webp_dianzanhou,imageView);
- imageView.setLayoutParams(params);
- //把IV添加到父布局当中
- addView(imageView);
-
- startDelayedRemoval(imageView,1500);
- L.e("Love", "------------onSingleClick--------------");
- if (loveClickListener != null) {
- handler.removeCallbacksAndMessages(null);
- singleClickPending = false;
- loveClickListener.onDoubleClick(); // 双击事件回调
- return true; // 拦截双击事件,不传递到子视图
- }
-
- } else {
- // 单击事件
- if (loveClickListener != null) {
- singleClickPending = true;
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- // 如果延时期间没有第二次点击,则执行单击事件
- loveClickListener.onSingleClick();
- singleClickPending = false;
- }
- }, SINGLE_CLICK_DELAY);
- return true; // 拦截单击事件,不传递到子视图
- }
- }
- break;
- case MotionEvent.ACTION_CANCEL:
- // 如果移动距离超过阈值,取消单击事件的执行
- handler.removeCallbacksAndMessages(null);
- singleClickPending = false;
- break;
- }
- return super.dispatchTouchEvent(event);
- }
-
-
- // 设置点击事件监听器
- @Override
- public void setOnClickListener(OnClickListener l) {
- this.clickListener = l;
- }
-
-
- private void startDelayedRemoval(final ImageView imageView, long delayMillis) {
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- // 当动画结束以后,需要把控件从父布局移除
- ImgLoader.display(getContext(), 0, imageView);
- removeViewInLayout(imageView);
- }
- }, delayMillis);
- }
- }
其中main_webp_dianzanhou是一个webp图片。当用户点击后直接播放就行了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。