导航:首页 > 操作系统 > android酷炫控件

android酷炫控件

发布时间:2023-02-14 05:25:29

Ⅰ 如何系统的学习android自定义各种酷炫控件

首先,为什么需要自定义View?

1. 现有的View满足不了你的需求,也没有办法从已有控件派生一个出来;界面元素需要自己绘制。
2. 现有View可以满足要求,把它做成自定义View只是为了抽象:为这个自定义View提供若干方法,方便调用着操纵View。通常做法是派生一个已有View,或者结合xml文件直接inflate。

目前常用的基本上是第二种方式,这种方式非常简单,与通常的View使用方法基本相同,但是作用却异常强大,拥有了这一层抽象,代码更加整洁也更容易维护,通过抽取自定义View的公共操作方法也减少了冗余代码,虽然简单,但不可忽视。

大多数人感觉神秘的应该是第一种,自绘控件,完全自定义;但其实这两种方式归根结底全部都是自绘;不信你去看看TextView的源码。只不过通常情况下系统帮我们绘制好了一些控件给开发者使用;OK,接下来就是一个问题。

在讲述之前我还是啰嗦地重申一下,复用已有View是最最常用也最有效的自定义View方式,必须熟练使用。

其次,如何自定义View?

想一下,一个View给用户最直观的感知是什么?静止的形态和动态的操作。静止的形态意思就是一个View呈现到用户眼里长成啥样子?动态操作指的是,用户与View之间可以有哪些交互?点击滑动View的不同地方会有什么反应?

1. 静态

如果一个自定义View的样式都没有办法绘制出来,那么后续的交互就是空谈了;我们一步步分解这个问题。

1.1 你的自定义View分为哪几个部分?是所有的部分都需要手动绘制还是只有一部分——找出需要完全自定义的部分,其他的部分用已有View实现。

1.2 你的自定义View的每个部分长成什么样,占用多大空间——结合理论知识View的measure过程,比如match_parent, wrap_content结合父View的laout_params参数最终测量大小是多少?

1.3 你的自定义View每个部分摆放在哪?相对位置如何?——View的layout过程。

1.4 你的自定义View那些完全需要手动绘制的部分是什么样,如何绘制?

你得学会操纵Canvas,学会2D绘图,什么?你跟我说3D,OpenGL?学会这些再说。

Ⅱ Android自定义控件总结

每个view的坐标系原点为左上角那个点,水平方向为x轴,右正左负,竖直方向为y轴,下正上负。

canvas.drawColor //绘制区域涂上颜色(设置底色/蒙层)

canvas.drawCircle(float centerX(圆心X坐标),float centerY(圆心Y坐标),float radius(圆的半径,单位像素),Paint paint)

canvas.drawBitmap

canvas.drawRect(float left,float top,float right,float bottom,Paint paint) //画矩形

canvas.drawRect(RecF rect,Paint paint)

canvas.drawRect(Rect rect,Paint paint)

canvas.drawPoint(float x(点X轴坐标),float y(点Y轴坐标),Paint paint)//画点

点的大小 ->paint.setStrokeWidth(width)

点的形状 ->paint.setStrokeCap(cap)

ROUND(圆形),BUTT(平头),SQUARE(方头)

canvas.drawPoints()//批量画点

canvas.drawOval(float left(左边界点),float top(上边界点),float right(右边界点),float bottom(下边界点),Paint paint) //画椭圆

canvas.drawLine(float startX(起点X轴坐标),float startY(起点Y轴坐标),float stopX(终点X轴坐标),float stopY(终点X轴坐标),Paint paint) (setStyle对直线没有影响)

canvas.drawLines(批量画线)

canvas.drawRoundRect(float left,float top,float right,float bottom,float rx(圆角的横向半径),float ry(圆角的纵向坐标),Paint paint)//画圆角矩形

canvas.drawRoundRect(RectF rect,float rx, float ry,Paint paint)

canvas.drawArc(float left, float top, float right, float bottom, float startAngle(起始角度,顺时针为正,逆时针为负), float sweepAngle(弧形划过角度), boolean useCenter(是否连接到圆心), Paint paint) //绘制弧形或扇形 根据弧形所在椭圆进行绘制

canvas.drawPath() //通过描述路径的方式来绘制图形

path.addXxx() —添加子图形

path.addCircle(x,y,radius,dir(路径方向:顺时针/逆时针))

path.xxxTo —画线

path.lineTo()

path.rLineTo()

path.close() —封闭当前图形

path.setFillType(Path.FillType ft) //设置填充模式

canvas.drawBitmap(Bitmap bitmap,float left,float top,Paint paint);//画bitmap

canvas.drawBitmap(Bitmap bitmap,Rect src,RectF dst,Paint paint)

canvas.drawBitmap(Bitmap bitmap,Rect src,Rect dst,Paint paint)

canvas.drawBitmap(Bitmap bitmap,Matrix matrix,Paint paint)

canvas.drawText(String text,float x(起点x坐标),float y(起点y坐标),Paint paint) //绘制文字

Paint.setStyle //设置绘制模式

FILL 填充模式(默认)

STROKE 画线模式

FILL_AND_STROKE 既画线又填充

Paint.setStrokeWidth //设置线条宽度 (仅在style:Stroke、FILL_AND_STROLE下有效)

Paint.setTextSize //设置文字大小

Paint.setAntiAlias //设置抗锯齿开关

Paint.setTextSize(float textSize)//设置文字大小

Paint.setStrokeJoin(Paint.Join join) //设置拐角的形状

MITER//尖角(默认)

BEVEL//平角

ROUND//圆角

Paint.setStokeMiter(float miter)//设置MITER型拐角的延长线的最大值

设置颜色

直接设置颜色

Paint.setColor(int color)

Paint.setARGB(int a,int r,int g,int b)

Paint.setShader(Shader shader) //设置shader

LinearGradient 线性渐变

RadialGradient 辐射渐变

SweepGradient 扫描渐变

BitmapShader 用bitmap的像素来作为图形或文字的填充

ComposeShader 混合着色器,多个shader混合使用

Paint.setColorFilter(ColorFilter colorFilter) //设置颜色过滤

Paint.setXfermode(Xfermode xfermode) //以要绘制的内容为源图像,以View中已有内容作为目标图像,选取一个PorterDuff.Mode作为绘制内容的颜色处理方案。

色彩优化

Paint.setDither(boolean dither) //设置抖动来优化色彩深度降低时的绘制效果

Paint.setFilterBitmap(boolean filter) //设置双线性过滤优化Bitmap放大绘制的效果

可以理解为 由马赛克变成模糊状态

Paint.setPathEffect(PathEffect effect)//使用PathEffect设置形状的轮廓效果

CornerPathEffect//把所有的拐角变成圆角

DiscretePathEffect//把线条进行随机的偏离

DashPathEffect//使用虚线

PathDashPathEffect//使用一个Path来绘制虚线

SumPathEffect//组合效果

ComposePathEffect//组合效果,组合有先后顺序

Paint.setShadowLayer(float radius,float dx,float dy,int shadowColor)//添加阴影

Paint.setMaskFilter(MaskFilter maskfilter)//在绘制层上方的附加效果

BlurMaskFilter //模糊效果

new BlurMaskFilter(float radius(模糊范围),BlurMaskFilter.Blur style(模糊类型))

EmbossMaskFilter//浮雕效果

new EmbossMaskFilter(float[] direction(光源的方向),float ambient(环境光强度),float specular(炫光系数),float blurRadius(光线范围))

获取绘制的Path

getFillPath(Path src,Path dst)//实际path

getTextPath(Stirng text,int start,int end,float x,float y,Path)/getTextPath(char[] text,int index,int count,float x,float y,Path path)//文字的path

drawTextOnPath()//沿一条Path来绘制文字

StaticLayout //绘制文字,支持换行

paint.setFakeBoldText(booleab fakeBoldText)//是否使用伪粗体

paint.setStrikeThruText()//是否加删除线

paint.setUnderLineText(boolean underlineText)//是否加下划线

paint.setTextSkewX(float skewX)//设置文字横向错切角度

paint.setTextScaleX(float scaleX)//设置文字横向放缩

paint.setLetterSpacing(float letterSpacing)//设置字符间距,默认为0

paint.setTextAlign(Paint.Align align)//LEFT、CENTER、RIGHT默认为LEFT

paint.setTextLocale(Locale locale)/paint.setTextLocales(LocaleList locales) //设置绘制所用的地域

paint.setHinting(int mode)//是否启用字体微调

测量文字尺寸类:

paint.getFontSpacing();//获取推荐的行距

paint.getFontMetrics();//获取point的FontMetrics

baseline:基准线

ascent/descent:普通字符的顶部和底部范围

top/bottom:限制字型的顶部和底部

leading:行的额外间距,即上一行字的bottm与下一行字的top距离

paint.getTextBounds(String text(测量的文字),int start(文字的起始位置),int end(文字的结束位置),Rect bounds(文字显示范围的对象))//获取文字的显示范围

paint.measureText(String text)//测量文字占用的宽度

measureText()>getTextBounds()

paint.getTextWidths(String text,float[] widths)//获取字符串中每个字符的宽度,并把结果填入参数widths

paint.breakText(String text((要测量的文字),boolean measureForwards(测量的方向),float maxWidth(宽度上限(超出上限会截断文字)),float[] measuredWidth(用于接受数据))//测量完成后会把文字宽度赋给measureWidth[0]

paint.getRunAdvance(CharSequence text,int start(文字的起始坐标),int end(文字的结束坐标),int contextStart(上下文的起始坐标),int ContextEnd(上下文的结束坐标),boolean isRtl(文字的方向),int offset(字数的偏移))//计算某个字符处光标的x坐标

paint.getOffsetForAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, float advance)//计算出文字中最接近这个位置的字符偏移量

paint.hasGlyph(String s)//检查指定的字符串是否是一个单独的字型

canvas.clipRect()//范围裁剪

canvas.clipPath()//根据范围裁剪

canvas.translate(float dx,float dy)//位移

canvas.rotate(float degrees,float px,float py)//旋转

canvas.scale(float sx(横向缩放倍数),float sy(纵向缩放倍数),float px,float py)//缩放

canvas.skew(float sx(x轴的错切系数),float sy(y轴的错切系数))//错切

canvas.setMatrix(matrix)//用Matrix直接替换Canvas当前的变换矩阵

canvas.concat(matrix)//用Canvas当前的变换矩阵和Matrix相乘

Camera.rotate*()//三维旋转

1、super.draw()//总调度方法

2、super.onDraw()

3、dispatchDraw()//绘制子View的方法

绘制顺序:

draw()总调度方法,view的绘制过程都发生在draw()方法里

1、背景(drawBackground()不能重写)-------android:background:/View.setBackgroundXxx()

2、主体(onDraw())

3、子View(dispatchDraw())

4、滑动边缘渐变和滑动条(onDrawForeground())-------android:scrollbarXxx/View.setXXXScrollBarXXX()

5、前景(onDrawForeground())-------android:foreground/View.setForeground()

view.animate().translationX()//x轴偏移

1、如果是自定义控件,需要添加setter、getter方法

2、ObjectAnimator.ofXXX()创建ObjectAnimator对象

3、用start()方法执行动画

setDuration(int ration)//设置动画时长

setInterpolator(Interpolator interpolator)//设置插值器

ViewPropertyAnimator.setListener()/ObjectAnimator.addListener()

ViewPropertyAnimator.setUpdateListener()/ObjectAnimator.addUpdateListener()

ObjectAnimator.addPauseListener()

ViewPropertyAnimator.withStartAction/EndAction()

ArgbEvaluator//颜色渐变动画

PropertyValuesHolder//同一个动画中改变多个属性

PropertyValuesHolders.ofKeyframe()//把同一个属性拆分

AnimatorSet//多个动画配合执行

targetSdkVersion>=14,硬件加速默认开启

view.setLayerType()

LAYER_TYPE_SOFTWARE:使用软件来绘制View Layer,绘制到Bitmap,并顺便关闭硬件加速

LAYER_TYPE_HARDWARE:使用GPU来绘制View Layer,绘制到OpenGL texture(如果硬件加速关闭,那么行为和LAYER_TYPE_SOFTWARE一致)

LAYER_TYPE_NONE:关闭View Layer

View Layer可以加速无invalidate()(例如动画)时的刷新效率,但对于需要调用invalidate()的刷新无法加速

硬件加速并不支持所有的绘制操作

1、测量(measure)

View:View在onMeasuer中会计算自己的尺寸然后保存

ViewGroup:ViewGroup在onMeasure中会调用所有子View的measure让它们进行自我测量,并根据子View

计算出的期望尺寸来计算他们的事迹尺寸和位置然后保存。

2、布局(layout)

View:无子View所以onLayout不做任何处理

ViewGroup:ViewGroup在onLayout中会调用自己所有子View的layout方法,把他们的尺寸、位置传给他们, 让他们完成自我布局。

MeasureSpec = mode + size :父类传递过来给当前View的一个建议值

MeasureSpec.getMode(int spec)//获取模式

MeasureSpec.getSize(int spec)//获取数值

限制分类:

UNSPECIFIED(不限制)

AT_MOST(限制上限)->wrap_content

EXACTLY(限制固定值)->match_parent/具体值

1、重写onMeasure来修改已有的View尺寸

(1)、重写onMeasure方法,调用super.onMeasure触发原有的自我测量。

(2)、在super.onMeasure下用getMeasureWidth与getMeasureHeigh获取之前测量的结果,使用自己的算法计算新结果。

(3)、调用setMeasureDimension保存新结果。

2、重写onMeasure来全新定制自定义View的尺寸

与1区别,保证计算的同时,保证结果满足父View给出的尺寸限制

(1)重写onMeasure,计算出View的尺寸

(2)使用resolve让子View的计算结果符合父View的限制,也可不使用该方法自己定义

3、重写onMeasure和onLayout来全新定制自定义ViewGroup的内部布局

两个注意点:

子控件间的margin值

1、重写generateLayoutParams()和generateDefaultLayoutParams()

2、获取margin值 MarginLayoutParams lp = (MarginLayoutParams )child.getLayoutParams()

子控件间的padding值

1、测量后直接getPaddingLeft、getPaddingTop、getPaddingRight、getPaddingBottom

重写onMeasure来计算内部布局

(1)调用每个子View的measure来计算子View的尺寸

结合layout_xxx和自己可用空间

(2)计算子View的位置并保存子View的尺寸和位置

(3)计算自己的尺寸并用setMeasureDimension保存

重写onLayout来摆放子View

(1)调用每个子View的layout,让他们保存自己的位置和尺寸

view工作原理

触摸事件

1、ACTION_DOWN:手指刚接触屏幕,按下去的那一瞬间

2、ACTION_MOVE:手指在屏幕上移动

3、ACTION_UP:手指从屏幕上松开的瞬间

事件序列:从ACTION_DOWN -> ACTION_UP

ViewGroup:
DispatchTouchEvent
• return true:表示该View内部消化掉了所有事件
• return false:表示事件在本层不再继续进行分发,并交由上层控件的onTouchEvent方法进行消费
• return super.dispatchTouchEvent(ev):默认事件将分发给本层的事件拦截onInterceptTouchEvent方法 进行处理
OnInterceptTouchEvent
• return true:表示将事件进行拦截,并将拦截到的事件交由本层控件的onTouchEvent进行处理
• return false:表示不对事件进行拦截,事件得以成功分发到子View
• return super.onInterceptTouchEvent(ev):默认表示不拦截该事件,并将事件传递给下一层View的 dispatchTouchEvent
OnTouchEvent 默认false
• return true:表示onTouchEvent处理完事件后消费了此次事件
• return fasle:表示不响应事件,那么该事件将会不断向上层View的onTouchEvent方法传递,直到某个View的 onTouchEvent方法返回true
• return super.dispatchTouchEvent(ev):表示不响应事件,结果与return false一样
子View不存在分发:
• DispatchTouchEvent 事件分发
• OnTouchEvent 默认true

如下图为事件分发流程图:

---------------------- 以上总结部分源自Hencoder教程 ------------------------------

Ⅲ 怎么快速简单的打造一个炫酷的ListView

View动画的特殊使用场景,比如:

在ViewGroup中可以控制子元素的出场效果

在Activity中可以实现不同Activity之间的切换效果,

关于Activity切换这点,这篇帖子就不细说了无非就是overridePendingTransition的使用,本文主要要说的是LayoutAnimation

LayoutAnimatioon

LayoutAnimation作用于ViewGroup,为ViewGroup指定一个动画,这样他的子元素出场时都会具有这种动画

LayoutAnimatioon中的属性:

android:delay="0.5"
表示子元素开始动画的延迟时间,比如子元素入场动画的时间周期为300ms,那么0.5表示每个子元素都需要延迟150ms才能播放入场动画,也就是说:第一个子元素延迟150ms,第二个子元素延迟300ms。

android:animationOrder="normal"
表示元素动画的顺序,有三种选项分别是:
A:nromal--表示顺序显示
B:reverse--表示逆向显示
C:random--表示随机显示

android:animation="@anim/anim_item"
为子元素指定具体的入场动画

LayoutAnimatioon的使用遵循以下几个步骤:

定义LayoutAnimation
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/anim_item"
android:animationOrder="normal"
android:delay="0.5">
</layoutAnimation>

为子元素指定具体的入场动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ration="600"
android:interpolator="@android:anim/accelerate_interpolator"
android:shareInterpolator="true">
<alpha
android:fromAlpha="0"
android:toAlpha="1.0" />
<translate
android:fromXDelta="500"
android:toXDelta="0" />
</set>

为ViewGroup指定android:layoutAnimation属性:
在xml布局文件中指定android:layoutAnimation属性:
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff4f7f9"
android:cacheColorHint="#00000000"
android:divider="#dddbdb"
android:dividerHeight="1.0px"
android:layoutAnimation="@anim/layout_animation"
android:listSelector="@android:color/transparent"
/>
或者,可以在java代码中通过LayoutAnimationController来指定:
ListView listview = (ListView) findViewById(R.id.listview);
Animation animation = AnimationUtils.loadAnimation(TestAnimActivity.this, R.anim.anim_item);
LayoutAnimationController controller = new LayoutAnimationController(animation);
controller.setDelay(0.5f);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
listview.setLayoutAnimation(controller);

然后正常使用ViewGroup(比如ListView)即可

怎么样,如此简单就能做出一个炫酷的ListView特效,so easy!

Ⅳ Android酷炫动画是怎么实现的

会定义控件、动画的最好,不会这些就网上找一些别人的三方框架!其实那些三方框架底层代码也是通过自定义控件、动画去实现了,这个难度系数比较高,想要做好一款酷炫的动画,需要对安卓底层源码有清晰的认识。

Ⅳ 32个实用酷炫的Android开源UI框架

1.Side-Menu.Android

分类侧滑菜单 , Yalantis 出品。

项目地址: https://github.com/Yalantis/Side-Menu.Android

2.Context-Menu.Android

可以方便快速集成漂亮带有动画效果的上下文菜单, Yalantis 出品。

项目地址: https://github.com/Yalantis/Context-Menu.Android

3.Pull-to-Refresh.Rentals-Android

提供一个简单可以自定义的 下拉刷新 实现,Yalantis 出品。

项目地址: https://github.com/Yalantis/Pull-to-Refresh.Rentals-Android

4.Titanic

可以显示水位上升下降的TextView

项目地址: https://github.com/RomainPiel/Titanic

5.AndroidSwipeLayout

滑动Layout ,支持单个View,ListView,GridView

项目地址: https://github.com/daimajia/AndroidSwipeLayout

Demo地址: Download Demo

6.Android Typeface Helper

可以帮你轻松实现自定义字体的库

项目地址: https://github.com/norbsoft/android-typeface-helper

7.android-lockpattern

Android的图案密码解锁

项目地址: https://code.google.com/p/android-lockpattern/

Demo地址: https://play.google.com/store/apps/details?id=group.pals.android.lib.ui.lockpattern.demo

文档介绍: https://code.google.com/p/android-lockpattern/wiki/QuickUse

APP示例:Android开机的图案密码解锁,支付宝的密码解锁

8.ToggleButton

状态切换的 Button,类似 iOS,用 View 实现

项目地址: https://github.com/zcweng/ToggleButton

9.WilliamChart

绘制图表的库,支持LineChartView、BarChartView和StackBarChartView三中图表类型,并且支持 Android 2.2及以上的系统。

项目地址: https://github.com/diogobernardino/WilliamChart

Demo地址: https://play.google.com/store/apps/details?id=com.db.williamchartdemo

Demo项目: https://github.com/diogobernardino/WilliamChart/tree/master/sample

10.实现滑动ViewPager渐变背景色

项目地址: https://github.com/TaurusXi/GuideBackgroundColorAnimation

11.Euclid

用户简历界面, Yalantis 出品。

项目地址: https://github.com/Yalantis/Euclid

12. InstaMaterial

Instagram的一组Material 风格的概念设计

项目地址: https://github.com/frogermcs/InstaMaterial

13. SpringIndicator

使用bezier实现粘连效果的页面指示

项目地址: https://github.com/chenupt/SpringIndicator

14. BezierDemo

仿qq消息气泡拖拽 消失的效果。

项目地址: https://github.com/chenupt/BezierDemo

15. FoldableLayout

折叠的信纸被打开一样的动画效果

项目地址: https://github.com/alexvasilkov/FoldableLayout

16.Taurus

下拉刷新,Yalantis 出品。(是不是有点似曾相识呢?)

项目地址: https://github.com/Yalantis/Taurus

17. PersistentSearch

在点击搜索的时候控件在原有位置显示输入框。

项目地址: https://github.com/Quinny898/PersistentSearch

18. circular-progress-button

带进度显示的Button

项目地址: https://github.com/dmytrodanylyk/circular-progress-button

19. discrollview

当上下滚动的时候子元素会呈现不同动画效果的scrollView,网页上称之为:视差滚动

项目地址: https://github.com/flavienlaurent/discrollview

20. sweet-alert-dialog

一个带动画效果的 自定义对话框样式

项目地址: https://github.com/pedant/sweet-alert-dialog

21. android-floating-action-button

Material Desig风格的 浮动操作按钮

项目地址: https://github.com/futuresimple/android-floating-action-button

22. android-collapse-calendar-view

可以在月视图与周视图之间切换的calendar控件

项目地址: https://github.com/blazsolar/android-collapse-calendar-view

22. android-collapse-calendar-view

可以在月视图与周视图之间切换的calendar控件

项目地址: https://github.com/blazsolar/android-collapse-calendar-view

23. NumberProgressBar

个简约性感的数字进度条

项目地址: https://github.com/daimajia/NumberProgressBar

24. CircularProgressView

CircularProgressView 是通过自定义view的方式实现的Material风格的加载提示控件,兼容任何版本。

项目地址: https://github.com/rahatarmanahmed/CircularProgressView

25. OriSim3D-Android

opengl 实现了各种折纸效果,模拟了从一张纸折叠成一条船的整个过程

项目地址: https://github.com/RemiKoutcherawy/OriSim3D-Android

26、万能日历控件:CalendarView

GitHub: https://github.com/huanghaibin-dev/CalendarView

中文使用文档: https://github.com/huanghaibin-dev/CalendarView/blob/master/QUESTION_ZH.md

27、大图查看器: BigImage ImageView ViewPager

Github: https://github.com/SherlockGougou/BigImageViewPager

地址: https://www.jianshu.com/p/b15e65791c3f

支持超长图、超大图的图片浏览器,优化内存,支持手势放大、下拉关闭、查看原图、加载百分比、保存图片等功能。现已支持androidx。

28、安卓工具包androidUntilCode(安卓必备)

Github: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/README-CN.md

29、万能适配器-BRAVH

官网: http://www.recyclerview.org

GitHub: https://github.com/CymChad/BaseRecyclerViewAdapterHelper

RecyclerView

作为Android最常用的控件之一,是否常常为“她”操碎了心

BRVAH受益群体是所有Android开发者,希望更多开发者能够一起来把这个项目做得更好帮助更多人

30、智能刷新控件--SmartRefreshLayout

GitHub: https://github.com/scwang90/SmartRefreshLayout

中文: https://gitee.com/scwang90/SmartRefreshLayout

SmartRefreshLayout以打造一个强大,稳定,成熟的下拉刷新框架为目标,并集成各种的炫酷、多样、实用、美观的Header和Footer。 正如名字所说,SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构。 它继承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout , 其他第三方的 Ultra-Pull-To-Refresh 、 TwinklingRefreshLayout 。 还集成了各种炫酷的 Header 和 Footer。

31、内存泄漏检测工具--leakcanary

使用方式: https://www.jianshu.com/p/b83ddffcb3b5

LeakCanary是Square公司基于MAT开源的一个工具,用来检测Android App中的内存泄露问题。官方地址: https://github.com/square/leakcanary

32、 1218683832 / AndroidSlidingUpPanel

SlidingUpPanelLayout:可以上下滑动的菜单布

https://github.com/1218683832/AndroidSlidingUpPanel

Ⅵ android有带箭头的按钮控件吗

没有自带箭头的按钮,都是依靠图片。可以做一个箭头图片,然后按钮背景设置为这个图片就行了。
步骤:
1、在drawable下放入箭头图片arrow.png(http://www.jitu5.com/vector/201403/362739.html)
2、按钮设置android:background="@drawable/arrow"

Ⅶ 平常收藏的酷炫的Android开源特效库

       现在github上面越来越多大神,开源了各种特效库出来,真的很炫很赞呀,经常看到一些,收藏了不少,项目中总用得着的,统一记录一下,啧啧啧~作为我在上的第一篇文章,哇咔咔咔~很喜欢的UI,小清新,给人一种干净舒服的感觉,哈哈。

1. AndroidViewAnimations   动画效果,提供了各种类型的动画效果

2. material-ripple   点击波纹效果,让指定View显示Material Ripple 效果的控件,适用于所有的view

3. MaterialEditText ​   Material Design风格的输入框控件,可以设置图标,支持悬浮文字提示

4. MaterialViewPager    Material 风格的ViewPager库

5. Android圆形进度按钮,有时候项目中经常有一些圆形的按钮啊,还要自己在drawable中写个xml文件来给自己的按钮设置背景,有了这个真的是方便很多耶

6. MaterialDateTimePicker    日期选择器,Material风格,很漂亮,包括日历选择器和时间选择器,很强大 

7. SCViewPager    引导页,每个应用都有引导页吧,很方便,很好用

8. AndroidImageSlider   Android的图像滑块 ​ ,一个多姿势的轮播组件 

9. MaterialSearchView   非常漂亮的Material搜索视图

10. material-dialogs

11. material-calendarview    日历视图

12. NiftyDialogEffects    高颜值的动画效果的Dialog

13. Android-PickerView    仿iOS的PickerView控件,有时间选择和选项选择并支持一二三级联动效果

14. BottomNavigation    底部导航栏,很酷炫哟~

15. InfiniteCycleViewPager    一个有趣的ViewPager,超级酷炫

16. RecyclerViewCardGallery    RecyclerView实现Card Gallery效果,替代ViewPager方案。能够快速滑动并最终定位到居中位置

17. WaveSideBar     一个效果非常酷炫的索引侧边栏

18. 3dTagCloudAndroid    一个完全基于Android ViewGroup编写的控件,支持将一组View展示为一个3D球形集合,并支持全方向滚动

19. AndroidTagView

20. VideoListPlayer 实现了在列表控件(ListView, RecyclerView)中加载并播放视频,并支持滑动时自动播放/暂停的功能, 利用该项目,可以轻松实现类似Instagram的视频播放功能

21. EditTextFirework-Demo 一个绚丽易用的输入框烟花效果,模仿网页360搜索框

22. Android-SpinKit Android 加载动画库

阅读全文

与android酷炫控件相关的资料

热点内容
华为amd云服务器 浏览:495
汉化编程卡是什么意思 浏览:126
python学习pdf 浏览:313
祝绪丹程序员那么可爱拍吻戏 浏览:198
asp源码会员消费系统 浏览:113
java反射设置 浏览:152
python一行文 浏览:439
排序算法优缺点 浏览:563
恶搞加密文件pdf 浏览:674
gif怎么压缩图片大小 浏览:217
命令选择当前不可用 浏览:158
欧几里得算法如何求逆元 浏览:506
男中学生上课解压神器 浏览:373
加密狗拔掉之后怎么办 浏览:27
云储存平台源码 浏览:847
解压文件苹果手机rar 浏览:149
centos开机命令行模式 浏览:697
遍历所有listpython 浏览:660
力控加密文件夹 浏览:517
如何更改移动服务器密码 浏览:686