- 浏览: 5779760 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
可设置圆角背景边框的的按钮, 通过调节色彩明度自动计算按下(pressed)状态颜色
使用:
xml
https://github.com/czy1121/roundbutton
使用:
xml
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout android:paddingTop="20dp" android:orientation="vertical" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:orientation="horizontal" android:layout_height="wrap_content" android:layout_width="match_parent"> <com.github.czy1121.view.RoundButton app:btnSolidColor="#3F51B5" app:btnPressedRatio="0.8" app:btnCornerRadius="10dp" android:text="Text" style="@style/RoundButton"/> <com.github.czy1121.view.RoundButton app:btnSolidColor="#9C27B0" app:btnPressedRatio="0.8" app:btnCornerRadius="stadium" android:text="Text" style="@style/RoundButton"/> <com.github.czy1121.view.RoundButton app:btnSolidColor="#03A9F4" app:btnPressedRatio="0.8" app:btnCornerRadius="stadium" android:text="Text" style="@style/RoundButton"/> <com.github.czy1121.view.RoundButton app:btnSolidColor="#4CAF50" app:btnPressedRatio="0.9" app:btnCornerRadius="10dp" android:text="Text" style="@style/RoundButton" android:enabled="false"/> <com.github.czy1121.view.RoundButton android:layout_height="50dp" android:layout_width="50dp" app:btnSolidColor="@color/bg" app:btnPressedRatio="0.9" app:btnCornerRadius="stadium" android:text="Text" style="@style/RoundButton" android:layout_weight="0"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_height="wrap_content" android:layout_width="match_parent" android:background="#CDDC39"> <com.github.czy1121.view.RoundButton app:btnPressedRatio="1.5" app:btnCornerRadius="10dp" android:text="Text" style="@style/RoundButton.Two" app:btnStrokeColor="#3F51B5" android:textColor="#3F51B5"/> <com.github.czy1121.view.RoundButton app:btnPressedRatio="0.5" app:btnCornerRadius="stadium" android:text="Text" style="@style/RoundButton.Two" app:btnStrokeColor="#9C27B0" android:textColor="#9C27B0" app:btnStrokeDashWidth="6dp" app:btnStrokeDashGap="3dp"/> <com.github.czy1121.view.RoundButton app:btnPressedRatio="0.9" app:btnCornerRadius="stadium" android:text="Text" style="@style/RoundButton.Two" app:btnStrokeColor="#03A9F4" android:textColor="#03A9F4"/> <com.github.czy1121.view.RoundButton app:btnPressedRatio="0.9" app:btnCornerRadius="10dp" android:text="Text" style="@style/RoundButton.Two" app:btnStrokeColor="#4CAF50" android:textColor="#4CAF50"/> </LinearLayout> </LinearLayout>
import android.content.Context; import android.content.res.ColorStateList; import android.content.res.TypedArray; import android.graphics.Color; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.GradientDrawable; import android.util.AttributeSet; import android.view.Gravity; import android.widget.TextView; import com.github.czy1121.roundbutton.R; public final class RoundButton extends TextView { public RoundButton(Context context) { this(context, null); } public RoundButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public RoundButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundButton); float pressedRatio = a.getFloat(R.styleable.RoundButton_btnPressedRatio, 0.80f); int cornerRadius = a.getLayoutDimension(R.styleable.RoundButton_btnCornerRadius, 0); ColorStateList solidColor = a.getColorStateList(R.styleable.RoundButton_btnSolidColor); int strokeColor = a.getColor(R.styleable.RoundButton_btnStrokeColor, 0x0); int strokeWidth = a.getDimensionPixelSize(R.styleable.RoundButton_btnStrokeWidth, 0); int strokeDashWidth = a.getDimensionPixelSize(R.styleable.RoundButton_btnStrokeDashWidth, 0); int strokeDashGap = a.getDimensionPixelSize(R.styleable.RoundButton_btnStrokeDashGap, 0); a.recycle(); setSingleLine(true); setGravity(Gravity.CENTER); RoundDrawable rd = new RoundDrawable(cornerRadius == -1); rd.setCornerRadius(cornerRadius == -1 ? 0 : cornerRadius); rd.setStroke(strokeWidth, strokeColor, strokeDashWidth, strokeDashGap); if (solidColor == null) { solidColor = ColorStateList.valueOf(0); } if (solidColor.isStateful()) { rd.setSolidColors(solidColor); } else if (pressedRatio > 0.0001f) { rd.setSolidColors(csl(solidColor.getDefaultColor(), pressedRatio)); } else { rd.setColor(solidColor.getDefaultColor()); } setBackground(rd); } // 灰度 int greyer(int color) { int blue = (color & 0x000000FF) >> 0; int green = (color & 0x0000FF00) >> 8; int red = (color & 0x00FF0000) >> 16; int grey = Math.round(red * 0.299f + green * 0.587f + blue * 0.114f); return Color.argb(0xff, grey, grey, grey); } // 明度 int darker(int color, float ratio) { color = (color >> 24) == 0 ? 0x22808080 : color; float[] hsv = new float[3]; Color.colorToHSV(color, hsv); hsv[2] *= ratio; return Color.HSVToColor(color >> 24, hsv); } ColorStateList csl(int normal, float ratio) { // int disabled = greyer(normal); int pressed = darker(normal, ratio); int[][] states = new int[][]{{android.R.attr.state_pressed}, {}}; int[] colors = new int[]{pressed, normal}; return new ColorStateList(states, colors); } private static class RoundDrawable extends GradientDrawable { private boolean mIsStadium = false; private ColorStateList mSolidColors; private int mFillColor; public RoundDrawable(boolean isStadium) { mIsStadium = isStadium; } public void setSolidColors(ColorStateList colors) { mSolidColors = colors; setColor(colors.getDefaultColor()); } @Override protected void onBoundsChange(Rect bounds) { super.onBoundsChange(bounds); if (mIsStadium) { RectF rect = new RectF(getBounds()); setCornerRadius((rect.height() > rect.width() ? rect.width() : rect.height()) / 2); } } @Override public void setColor(int argb) { mFillColor = argb; super.setColor(argb); } @Override protected boolean onStateChange(int[] stateSet) { if (mSolidColors != null) { final int newColor = mSolidColors.getColorForState(stateSet, 0); if (mFillColor != newColor) { setColor(newColor); return true; } } return false; } @Override public boolean isStateful() { return super.isStateful() || (mSolidColors != null && mSolidColors.isStateful()); } } }
<declare-styleable name="RoundButton"> <!-- 背景色 --> <attr name="btnSolidColor" format="color"/> <!-- 边框色 --> <attr name="btnStrokeColor" format="color"/> <!-- 边框厚度 --> <attr name="btnStrokeWidth" format="dimension"/> <!-- 边框虚线长度 --> <attr name="btnStrokeDashWidth" format="dimension"/> <!-- 边框虚线间隙 --> <attr name="btnStrokeDashGap" format="dimension"/> <!-- 圆角半径,stadium 表示半径为 min(height,width) / 2--> <attr name="btnCornerRadius" format="dimension"> <enum name="stadium" value="-1"/> </attr> <!-- 自动计算按下(pressed)状态颜色的系数, 值为0时不自动计算 --> <attr name="btnPressedRatio" format="float"/> </declare-styleable>
https://github.com/czy1121/roundbutton
发表评论
-
NestedScrollView滚动到顶部固定子View悬停挂靠粘在顶端
2018-10-31 20:45 6812网上有一个StickyScrollView,称之为粘性Scro ... -
自定义Behavior实现AppBarLayout越界弹性效果
2017-03-31 09:33 10239一、继承AppBarLayout.Beha ... -
Android - 一种相似图片搜索算法的实现
2017-03-31 09:33 2570算法 缩小尺寸。 将图片缩小到8x8的尺寸,总共64个 ... -
使用SpringAnimation实现带下拉弹簧动画的 ScrollView
2017-03-30 11:30 2798在刚推出的 Support Library 25.3.0 里面 ... -
Android为应用添加角标(Badge)
2017-03-30 11:21 61081.需求简介 角标是什么意思呢? 看下图即可明了: 可 ... -
Android端与笔记本利用局域网进行FTP通信
2017-03-23 10:17 930先看图 打开前: 打开后: Activity类 ... -
PorterDuffColorFilter 在项目中的基本使用
2017-03-03 10:58 1301有时候标题栏会浮在内容之上,而内容会有颜色的变化,这时候就要求 ... -
ColorAnimationView 实现了滑动Viewpager 时背景色动态变化的过渡效果
2017-02-24 09:41 2175用法在注释中: import android.anima ... -
迷你轻量级全方向完美滑动处理侧滑控件SlideLayout
2017-01-16 16:53 2553纯手工超级迷你轻量级全方向完美滑动处理侧滑控件(比官方 sup ... -
Effect
2017-01-05 09:57 0https://github.com/JetradarMobi ... -
动态主题库Colorful,容易地改变App的配色方案
2016-12-27 14:49 2524Colorful是一个动态主题库,允许您很容易地改变App的配 ... -
对视图的对角线切割DiagonalView
2016-12-27 14:23 1076提供对视图的对角线切割,具有很好的用户定制 基本用法 ... -
仿淘宝京东拖拽商品详情页上下滚动黏滞效果
2016-12-26 16:53 3424比较常用的效果,有现成的,如此甚好!:) import ... -
让任意view具有滑动效果的SlideUp
2016-12-26 09:26 1664基本的类,只有一个: import android.a ... -
AdvancedWebView
2016-12-21 09:44 16https://github.com/delight-im/A ... -
网络请求库相关
2016-10-09 09:35 62https://github.com/amitshekhari ... -
ASimpleCache一个简单的缓存框架
2015-10-26 22:53 2125ASimpleCache 是一个为android制定的 轻量级 ... -
使用ViewDragHelper实现的DragLayout开门效果
2015-10-23 10:55 3341先看一下图,有个直观的了解,向下拖动handle就“开门了”: ... -
保证图片长宽比的同时拉伸图片ImageView
2015-10-16 15:40 3682按比例放大图片,不拉伸失真 import android. ... -
向上拖动时,可以惯性滑动显示到下一页的控件DragLayout
2015-10-16 14:53 5531仿照淘宝和聚美优品,在商品详情页,向上拖动时,可以加载下一页。 ...
相关推荐
通过调节色彩明度自动计算按下(pressed)状态颜色 Gradle repositories { maven { url "https://jitpack.io" } } dependencies { compile 'com.github.czy1121:roundbutton:1.1.0' } Usage XML 属性 <!-...
我们先梳理下按钮需要达到的效果:使用简单(即可以利用属性对按钮进行各种设置)可以支持设置按钮文字、按钮文字颜色、按钮文字大小可以支持统一设置圆角大小,也可以单独设置按钮每个圆角的大小可以支持设置按钮背景...
本文实例讲述了Android开发实现的圆角按钮、文字阴影按钮效果。分享给大家供大家参考,具体如下: 效果图: 如果要实现圆角图片,并变色须在drawable中配置背景文件如下: <?xml version=1.0 encoding=utf-8?&...
阴影圆角:可统一设置圆角,也可对某几个角单独设置 3. x,y轴阴影偏移 4. 随意修改阴影扩散程度 5. 隐藏阴影:隐藏某边或多边阴影,或完全隐藏 不止于阴影;系统shape功能:项目中shape、selector、ripple统统...
1,selector 按下修改背景和文本颜色 【1】点击改变字体颜色 – android:state_pressed(按压状态) 【2】selector状态选择器(bg_btn_two (存放 res – drawable)) 资源文件下,否则不起作用 【3】 selector...
按键按下判断,3种方法都可行,适用于薄膜按钮\手柄按键\脚踏按键
不过在使用过程中也发现了一些问题总结如下:需要在比较复杂的布局中使用渐变背景需要在比较复杂的布局中使用圆角按钮需要支持边框虚线需要在比较复杂的布局中使用阴影按钮没有默认点击效果没有动态设置方法等等需求...
Ubuntu14.04网络安装\基于PXE Pressed方式
在默认情况下,通过background-image指定的背景图片会自动重复平铺,以覆盖部件的整个填充矩形(即边框里面的那个区域)。 ///注意区别: 如果我们想创建能够随着部件大小自动缩放而不是平铺的背景,我们需要设置一...
如果按钮,在按下时,背景变化,如果在代码中动态设置,相对比较麻烦。Android为我们提供了selector背景选择器可以非常方便的解决这一问题。 Selector的结构描述: 1.android:state_pressed=”true/false” true:...
按钮可以通过按下一个按钮多少秒来区分多个动作。 可以将操作配置为以秒为单位定义的时间间隔重复执行。 与带有四个按钮的Adafruit 2.8“屏幕一起使用和测试。 用法 usage: gpiocmd.py [-h] [-v] [--log-format ...
QCheckBox QCheckBox 的默认选择器。 QCheckBox::indicator QCheckBox 的指示器,即复...QCheckBox::indicator:pressed QCheckBox 处于按下状态下的指示器。 QCheckBox::indicator:on QCheckBox 处于选中状态下的指示器
React本机材料按钮 材质按钮在iOS和Android上具有一致的行为 产品特点 易于使用 iOS和Android上一致的外观 动画状态转换 触动波纹动画 纯JavaScript实现 安装 npm install --save react-native-material-buttons ...
可根据普通情况下的颜色(normalColor)来自动生成按压态的颜色 支持normal、pressed、checked、disabled状态的效果 支持SVG和TINT,并且二者可以配合使用 可以开启水波纹(ripple)按压效果 > 如果你的需求很简单...
-Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 -修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox...
2、使用visualstatemanager、visualstategroup、visualstate控制button的normal、mouseover、pressed等状态切换的过渡效果 3、这里是效果展示和代码解析:...
swithbutton需要的背景图片
-Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 -修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox...
设置不同状态的表现形式,则会在不同场景下有不同状态。如文字:被选中状态,未被选中状态。 selector的普通使用则是为对应单个控件添加以selector为背景的资源,则能达到目的。联合使用则是基本使
京东商城的底部布局的选择效果看上去很复杂,其实很简单,这主要是要感谢 selector 选择器,本文将讲解仿照京东商城的底部布局的选择效果,如何实现 selector 选择器,在不同的状态下,给 view 设置不同的背景。...