Android开发中的小积累

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16247851/article/details/78055775
  • 获取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时精度已丢失)

猜你喜欢

转载自blog.csdn.net/qq_16247851/article/details/78055775
今日推荐