吐槽

来个效果图吧先~

这里写图片描述

哎╮(╯▽╰)╭本月的开发项目终于在月底的时候拿到了接口,所以赶紧用迅雷掩耳不及盗铃之响叮当之势撸完了那个从Eclipse中导入的古董级项目.今天早上看到了个效果,感觉还挺有意思的,照着撸了一下,记录总结一下实现过程吧

简介

其实也没啥,这个动画效果是RecyclerView 自带的,之前一直用notifyDateSetChange(),一直没有发现,其实recyclerview很好心的自带了插入动画,调用notifyItemInserted()插入即可

自己写的也就两个部分,第一自定义Drawable ,类似自定义view吧,将图片化成六边形.第二,通过自定义LayoutManager实现按照六边形位置摆放1~7个子控件(原文是可以添加很多圈的,我就简单写写了)

public class HiveDrawable extends Drawable {

private Bitmap mBitmap;

private Paint paint;

private Path path;

private Rect rect;

public HiveDrawable(Bitmap bitmap) {

init();

if (bitmap!=null){

BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

paint.setShader(shader);

}

}

@Override

public int getIntrinsicHeight() {

if (mBitmap!=null){

return mBitmap.getHeight();

}else {

return super.getIntrinsicHeight();

}

}

@Override

public int getIntrinsicWidth() {

if (mBitmap!=null){

return mBitmap.getWidth();

}else {

return super.getIntrinsicWidth();

}

}

@Override

public void setBounds(int left, int top, int right, int bottom) {

super.setBounds(left, top, right, bottom);

rect = new Rect();

rect.set(left,top,right,bottom);

int l = rect.width() / 2; //考虑横向的情况

int h = rect.height();

double v = Math.sqrt(3) / 2;

path.reset();

path.moveTo(left,h/2);

path.lineTo(left+l/2, (float) (h/2-v*l));

path.lineTo(right-l/2, (float) (h/2-v*l));

path.lineTo(right,h/2);

path.lineTo(right-l/2, (float) (h/2+v*l));

path.lineTo(left+l/2, (float) (h/2+v*l));

path.moveTo(left,h/2);

path.close();

}

private void init() {

if (paint==null){

paint = new Paint();

paint.setAntiAlias(true);

paint.setStyle(Paint.Style.FILL);

paint.setStrokeWidth(3f);

}

if (path==null){

path = new Path();

}

}

@Override

public void draw(@NonNull Canvas canvas) {

canvas.drawPath(path,paint);

}

@Override

public void setAlpha(@IntRange(from = 0, to = 255) int alpha) {

if (paint!=null){

paint.setAlpha(alpha);

}

}

@Override

public void setColorFilter(@Nullable ColorFilter colorFilter) {

if (paint!=null)

paint.setColorFilter(colorFilter);

}

@Override

public int getOpacity() {

return 0;

}

}

自定义LayouManager

public class HiveLayoutManager extends RecyclerView.LayoutManager {

private List> positionList=new ArrayList();

@Override

public RecyclerView.LayoutParams generateDefaultLayoutParams() {

return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

}

@Override

public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {

detachAndScrapAttachedViews(recycler);

// removeAllViews();

int childCount = state.getItemCount();

View first = recycler.getViewForPosition(0);

measureChildWithMargins(first,0,0);

int left = (getWidth() - getDecoratedMeasuredWidth(first)) / 2;

int right=(getWidth() + getDecoratedMeasuredWidth(first)) / 2;

int top=(getHeight()-getDecoratedMeasuredHeight(first))/2;

int bottom=(getHeight()+getDecoratedMeasuredHeight(first))/2;

//数学计算 每一层的最后一个都为 n*n*3+3*n+1

addView(first);

layoutDecoratedWithMargins(first,left,top,right,bottom);

int num=childCount>7?7:childCount;

int cX = getWidth() / 2;

int cY = getHeight() / 2;

for (int i = 1; i

View view = recycler.getViewForPosition(i);

addView(view);

measureChildWithMargins(view,0,0);

int height = getDecoratedMeasuredHeight(view);

int width = getDecoratedMeasuredWidth(view);

double cos = Math.cos(Math.PI /3* (i - 1));

double sin = Math.sin(Math.PI /3 *(i - 1));

double viewCY = getHeight()/2-height * cos;

double viewCX = getWidth()/ 2 - height * sin;

layoutDecoratedWithMargins(view, ((int) (viewCX - width / 2)), ((int) (viewCY - height / 2))

,((int) (viewCX + width / 2)), ((int) (viewCY + height / 2)));

}

}

}

android 六边形简书,六边形RecyclerView相关推荐

  1. android 仿简书评论,Android仿简书搜索框效果的示例代码

    前言 之前用简书的时候一直是在web端,后来下载了客户端,看到了搜索的那个动画,就尝试的去写了,没写之前感觉挺容易的,写了之后,就感觉里面还是有些要注意的东西的.话不多说,直接上图. Activity ...

  2. android计步器简书,自定义View-仿QQ运动步数进度效果

    自定义View-仿QQ运动步数进度效果 一.写在前面 (1) 图一,仿QQ步数运行效果 (2) 图二,完整的圆效果 完整代码请看这 二.正文开始 (1)首先来个三部曲,自定义属性,布局设置,属性获取 ...

  3. android 仿简书评论,Android 开发仿简书登录框可删除内容或显示密码框的内容

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...

  4. android jsoup简书,jsoup爬虫简书首页数据做个小Demo

    昨天LZ去面试,遇到一个大牛,被血虐一番,发现自己基础还是很薄弱,对java一些原理掌握的还是不够稳固,比如java反射注解,知道一点就是说不出来,很尴尬... 生命不止,学习不止啊 之前那个项目 Q ...

  5. Android仿简书、淘宝等APP View弹出效果

    在用简书App的时候觉得这个View的弹出效果特别好,而且非常平滑. 先看看效果: 主要是scale,alpha,translation几个普通动画组合,这里不再分析. 实现效果图: 代码:https ...

  6. android仿简书编辑器,类似zine,简书的app移动编辑器-Light Seven

    原标题:类似zine,简书的app移动编辑器-Light Seven 无论你是否从事文字编辑工作,我相信每个人都会接触到文字编辑.既然接触到文字编辑,顺理成章的就会接触到文字编辑的应用和软件. 在生活 ...

  7. android 六边形简书,深入理解六边形架构

    六边形架构或六角架构是Alistair Cockburn在2005年提出,解决了传统的分层架构所带来的问题,实际上它也是一种分层架构,只不过不是上下或左右,而是变成了内部和外部.在领域驱动设计(DDD ...

  8. android 心跳 简书,如何高效维持网络长连接:手把手教你实现 自适应的心跳保活机制...

    前言 当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接 目录 示意 ...

  9. android 购物车 简书,Android仿饿了么购物车效果

    先看下效果图: ezgif-1-8f133ca916.gif 1.首先列表布局采用Recycleview android:id="@+id/container" android:l ...

  10. android profiler 简书,使用AndroidStudio提供的Android Profiler工具和mat进行内存泄漏分析...

    废话不多说直接说流程 给项目中集成LeakCanary工具进行内存泄漏检测.发现有内存泄漏后该工具会进行提示 有内存泄露后我们需要使用as的profiler工具进行分析并获取到.hprof文件,步骤如 ...

最新文章

  1. fdquery update
  2. onbeforeedit和onbeginedit数据不一致_Redis缓存与数据库产生不一致的问题该如何解决?...
  3. 暑假N天乐【比赛篇】 —— 2019杭电暑期多校训练营(第四场)
  4. java元婴期(25)----java进阶(mybatis(4)---高级映射查询缓存)
  5. Java IO流之打印流与标准流
  6. 微软人物立方——效果还很漂亮的
  7. 1 用存储过程实现分页,除了上一页,下一页,第一页,和末页外还要有go按钮,以及go到那里的文本框。另外还要在Lable显示“当前x页,一共y页”。注意验证控件的使用和 链接存储过程的内容。...
  8. 6.java 代码块
  9. 【LeetCode】1. 盛最多水的容器:C#三种解法
  10. hibernate正向生成数据库表以及配置——Teacher.java
  11. 前出塞数据挖掘的一些必须了解的概念
  12. POJ3737 UmBasketella
  13. Java常用集合框架源码解析合集
  14. 华为模拟器路由器交换机远程控制
  15. 安川g7接线端子图_安川G7变频器各接线端子功能说明
  16. C0型单元刚度矩阵的性质
  17. 江苏大学计算机学院换届,关于计算机学院各支部选举结果的批复
  18. python-pygame小游戏之五子棋
  19. 谜底是计算机的谜语英语,有关英语谜语大全及答案
  20. Python中IO编程-文件读写

热门文章

  1. laaS 、paaS和SaaS区别
  2. 增强现实技术AR的50个应用场景
  3. 前端程序员兼职?不妨来试试这几个方法
  4. selenium元素模糊定位xpath contains、starts-with和ends-with
  5. HTML中的src、href
  6. “让我帮你百度一下”源码
  7. Python文件的操作
  8. Microsemi Libero SoC 教程2 (点亮LED闪烁)
  9. 研读:OASIS:On Achieving a Sanctuary for Integrity and Secrecy on Untrusted Platforms
  10. 【实践与问题解决38】win10桌面图标变成一个空白图标