Android开发中的小积累

来源:互联网 发布:foxmail邮件导入到mac 编辑:程序博客网 时间:2024/06/05 08:24
  • 获取Recycleview当前屏幕可见item,并且拿到任何一个可见item的view
int lastItemPosition=0;int firstItemPosition = 0;RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();//判断是当前layoutManager是否为LinearLayoutManager//只有LinearLayoutManager才有查找第一个和最后一个可见view位置的方法if (layoutManager instanceof LinearLayoutManager) { LinearLayoutManager linearManager = (LinearLayoutManager) layoutManager;//获取最后一个可见view的位置lastItemPosition = linearManager.findLastVisibleItemPosition();//获取第一个可见view的位置firstItemPosition = linearManager.findFirstVisibleItemPosition();                    }//获取可见的任何item,记得要减掉firstItemPosition,因为item复用的问题,这个往往容易忽略,从而导致获取的view为空 View view=recyclerView.getChildAt(i-firstItemPosition);
  • 获取view在屏幕中的位置
//这个方法是返回view在Y轴的位置,包括状态栏/标题栏等,是该view在整个屏幕中的位置private int getY(View flagView) {        int[] location = new int[2];        flagView.getLocationOnScreen(location);        int x = location[0];        int y =location[1];        return y;    }
  • 获取状态栏的高度
private int getStatusHeight() {        int statusBarHeight1 = -1;        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");        if (resourceId > 0) {            statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);        }        return statusBarHeight1;    }
  • .Java 中的精确运算:BigDecimal
    例如:
    System.out.println(0.06+0.01);
    输入结果是:0.06999999999999999, 而不是我们想要的0.7
    原因在于我们的计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。如:2.4的二进制表示并非就是精确的2.4。反而最为接近的二进制表示是 2.3999999999999999。所以要用BigDecimal,以下是实例代码,两个数相乘:
 public static double mul(String value1, String value2) {        BigDecimal b1 = new BigDecimal(value1);        BigDecimal b2 = new BigDecimal(value2);        return b1.multiply(b2).doubleValue();    }

使用BigDecimal,但一定要用BigDecimal(String)构造器,而千万不要用
BigDecimal(double)来构造(也不能将float或double型转换成String再来使用BigDecimal(String)
来构造,因为在将float或double转换成String时精度已丢失)

原创粉丝点击