package com.dk.view.drop; import com.dk.view.drop.DropCover.OnDragCompeteListener; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Build.VERSION; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; public class WaterDrop extends RelativeLayout { private Paint mPaint = new Paint(); private TextView mTextView; private DropCover.OnDragCompeteListener mOnDragCompeteListener; private boolean mHolderEventFlag; public WaterDrop(Context context) { super(context); init(); } public WaterDrop(Context context, AttributeSet attrs) { super(context, attrs); init(); } public void setText(String str) { mTextView.setText(str); } public void setTextSize(int size) { mTextView.setTextSize(size); } @SuppressLint("NewApi") private void init() { mPaint.setAntiAlias(true); if (VERSION.SDK_INT > 11) { setLayerType(View.LAYER_TYPE_SOFTWARE, null); } mTextView = new TextView(getContext()); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.addRule(RelativeLayout.CENTER_IN_PARENT); mTextView.setTextSize(13); mTextView.setTextColor(0xffffffff); mTextView.setLayoutParams(params); addView(mTextView); } @Override protected void dispatchDraw(Canvas canvas) { mPaint.setColor(0xffff0000); canvas.drawCircle(getWidth() / 2, getHeight() / 2, getWidth() / 2, mPaint); super.dispatchDraw(canvas); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } @Override public boolean onTouchEvent(MotionEvent event) { ViewGroup parent = getScrollableParent(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mHolderEventFlag = !CoverManager.getInstance().isRunning(); if (mHolderEventFlag) { if (parent != null) parent.requestDisallowInterceptTouchEvent(true); CoverManager.getInstance().start(this, event.getRawX(), event.getRawY(), mOnDragCompeteListener); } break; case MotionEvent.ACTION_MOVE: if (mHolderEventFlag) { CoverManager.getInstance().update(event.getRawX(), event.getRawY()); } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (mHolderEventFlag) { if (parent != null) parent.requestDisallowInterceptTouchEvent(false); CoverManager.getInstance().finish(this, event.getRawX(), event.getRawY()); } break; } return true; } private ViewGroup getScrollableParent() { View target = this; while (true) { View parent; try { /** * ViewRootImpl cannot be cast to android.view.View */ parent = (View) target.getParent(); } catch (Exception e) { return null; } if (parent == null) return null; if (parent instanceof ListView || parent instanceof ScrollView) { return (ViewGroup) parent; } target = parent; } } public void setOnDragCompeteListener(OnDragCompeteListener onDragCompeteListener) { mOnDragCompeteListener = onDragCompeteListener; } }