public class NearestTouchFrame extends FrameLayout {
private final ArrayListmClickableChildren = new ArrayList<>();
private final boolean mIsActive;
private final int[] mTmpInt = new int[2];
private final int[] mOffset = new int[2];
private View mTouchingChild;
public NearestTouchFrame(Context context, AttributeSet attrs) {
this(context, attrs, context.getResources().getConfiguration());
}
@VisibleForTesting
NearestTouchFrame(Context context, AttributeSet attrs, Configuration c) {
super(context, attrs);
mIsActive = c.smallestScreenWidthDp < 600;//这个地方做修改。可以去掉或者改变大小
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mIsActive) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mTouchingChild = findNearestChild(event);
}
if (mTouchingChild != null) {
event.offsetLocation(mTouchingChild.getWidth() / 2 - event.getX(),
mTouchingChild.getHeight() / 2 - event.getY());
return mTouchingChild.getVisibility() == VISIBLE
&& mTouchingChild.dispatchTouchEvent(event);
}
}
return super.onTouchEvent(event);
}