package com.eighteengray.commonutillibrary; import android.graphics.PointF; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.FloatMath; import android.view.MotionEvent; import android.view.View; import java.util.ArrayList; import java.util.List; import static android.R.attr.fragment; import static android.R.attr.x; import static android.R.attr.y; /** * View相关工具类 */ public class ViewUtils { /** * 获取触摸屏幕时的view * @param view * @param x * @param y * @return */ public static View getTouchTarget(View view, int x, int y) { View target = null; ArrayList<View> views = view.getTouchables(); for(View child:views) { if(isTouchPointInView(view, x, y)) { target = child; break; } } return target; } /** * 判断触摸屏幕的点是否在指定View中 * @param view * @param x * @param y * @return */ public static boolean isTouchPointInView(View view, int x, int y) { int[] location = new int[2]; view.getLocationOnScreen(location); int left = location[0]; int top = location[1]; int right = left + view.getMeasuredWidth(); int bottom = top + view.getMeasuredHeight(); if(view.isClickable() && x >= left && x <= right && y >= top && y >= bottom) { return true; } return false; } //获取两指之间的距离 public static float getDistance(MotionEvent event) { if(event.getPointerCount() < 2) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return FloatMath.sqrt(x * x + y * y); } else { return 10; } } //取两指的中心点坐标 public static PointF getMid(MotionEvent event) { float midX = (event.getX(1) + event.getX(0)) / 2; float midY = (event.getY(1) + event.getY(0)) / 2; return new PointF(midX, midY); } //Fragment的工具 public static void addFragment(FragmentActivity activity, int containerViewId, Fragment fragment) { if (activity != null) { FragmentManager fm = activity.getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.add(containerViewId, fragment); ft.commitAllowingStateLoss(); } } public static void removeFragment(FragmentActivity activity, Fragment fragment) { if(activity != null) { FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); ft.remove(fragment); ft.commitAllowingStateLoss(); } } public static void showFragment(FragmentActivity activity, List<Fragment> fragments, Fragment fragment) { FragmentManager fm = activity.getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); for (Fragment itemFragment : fragments) { if (itemFragment == fragment) { ft.show(itemFragment); } else { ft.hide(itemFragment); } } ft.commitAllowingStateLoss(); } }