Android开发仿IOS滑动开关实现代码
Android与iOS相比,ios好多控件都是自带的,而android需要使用自定义来实现。今天说的是ios的滑动开关,我层看到好多博客都是通过自定义ToggleButton实现的。这里我通过自定义view来实现他的效果。
首先在onsizechange里把2个半圆和一个矩形绘制出来。
width = w; height = h; left = top = 0; right = width; bottom = height * 0.8f; cx = (right + left) / 2; cy = (bottom + top) / 2; RectF rectF = new RectF(left, top, bottom, bottom); path.arcTo(rectF, 90, 180); rectF.left = right - bottom; rectF.right = right; path.arcTo(rectF, 270, 180); path.close(); circle_left = 0; circle_right = bottom; circle_width = circle_right - circle_left; float circle_height = (bottom - top) / 2; radius = circle_height * 0.9f; borderwidth = (int) (2 * (circle_height - radius)); circle_cx = width - circle_height;
剩下的就是ondraw方法来绘制颜色,以及切换的效果。
protected void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setStyle(Style.FILL); paint.setAntiAlias(true); canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG)); if (isChoose) { paint.setColor(onColor); } else { paint.setColor(offColor); } canvas.drawPath(path, paint); isAnimation = isAnimation - 0.1f > 0 ? isAnimation - 0.1f : 0; //缩放大小参数随isAnimation变化而变化 final float scale = 0.98f * (isChoose ? isAnimation : 1 - isAnimation); //保存canvas状态 canvas.save(); canvas.scale(scale, scale, circle_cx, cy); paint.setColor(offColor); canvas.drawPath(path, paint); canvas.restore(); paint.reset(); float bTranslateX = width - circle_width; final float translate = bTranslateX * (isChoose ? 1 - isAnimation : isAnimation); canvas.translate(translate, 0); if (isAnimation > 0) { invalidate(); } canvas.save(); paint.setStyle(Style.FILL); paint.setColor(offColor); canvas.drawCircle(circle_width / 2, circle_width / 2, radius, paint); // 按钮白底 paint.setStyle(Style.STROKE); paint.setColor(borderColor); paint.setStrokeWidth(borderwidth); canvas.drawCircle(circle_width / 2, circle_width / 2, radius, paint); // 按钮灰边 canvas.restore(); }
最后我们在ontouch里面去改变他的状态:
public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: return true; case MotionEvent.ACTION_CANCEL: return true; case MotionEvent.ACTION_UP: isAnimation = 1; isChoose = !isChoose; listener.onStateChanged(isChoose); invalidate(); break; } return super.onTouchEvent(event); }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍Android开发仿bilibili刷新按钮的实现代码,包括了Android开发仿bilibili刷新按钮的实现代码的使用技巧和注意事项,需要的朋友参考一下 一、简述 最近跟小伙伴一起讨论了一下,决定一起仿一个BiliBili的app(包括android端和iOS端),我们并没有打算把这个项目完全做完,毕竟我们的重点是掌握一些新框架的使用,并在实战过程中发现并弥补自身的
本文向大家介绍Android开发之使用150行代码实现滑动返回效果,包括了Android开发之使用150行代码实现滑动返回效果的使用技巧和注意事项,需要的朋友参考一下 今天带大家实现滑动返回效果.,具体内容如下所示: 先看看效果图: 因为没有具体内容,也没有简书的图片资源,所以稍微简陋了点. 但是依然不妨碍我们的效果展示~ OK,接下来惯例,通过阅读本文你能学习到: ViewDragHelper的
本文向大家介绍Android开发基于ViewPager+GridView实现仿大众点评横向滑动功能,包括了Android开发基于ViewPager+GridView实现仿大众点评横向滑动功能的使用技巧和注意事项,需要的朋友参考一下 先给大家展示下效果图,如果大家大家感觉不错,请参考实现思路及代码 1 ViewPager类提供了多界面切换的新效果。 新效果有如下特征: [1] 当前显示一组界面中的其
本文向大家介绍Android自定义view仿IOS开关效果,包括了Android自定义view仿IOS开关效果的使用技巧和注意事项,需要的朋友参考一下 本文主要讲解如何在 Android 下实现高仿 iOS 的开关按钮,并非是在 Android 自带的 ToggleButton 上修改,而是使用 API 提供的 onDraw、onMeasure、Canvas 方法,纯手工绘制。基本原理就是在 Ca
1.4.0 新增 滑动开关,用于切换 on/off 状态。 示例 基本用法 <cube-switch v-model="value"> Switch </cube-switch> export default { data() { return { value: true } } } value值true对应着 on 状态(开) ,value值false
本文向大家介绍Android实现仿通讯录侧边栏滑动SiderBar效果代码,包括了Android实现仿通讯录侧边栏滑动SiderBar效果代码的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android实现仿通讯录侧边栏滑动SiderBar效果代码。分享给大家供大家参考,具体如下: 之前看到某些应用的侧边栏做得不错,想想自己也弄一个出来,现在分享出来,当然里面还有不足的地方,请大家多多包