哈哈 全才的人是不是很酷,

[搞笑图片集锦]——螳螂捕蝉,黄雀在后
每年夏天都会清理冰块
第42页/共60页&&
本文导航:
每年夏天都会清理冰块
[2年前] 坑爹的滑梯|天气太热了,必须得降温。。。。|大哥,你太糗了|其实做个模特也不容易|喜感十足,狗狗界的谐星。。。|放开妹子我来打!!|这让我如何选择|孕育了你们的麻麻是有强迫症么。|大众汽车的死忠粉丝|太热了|这不是到了天堂吧。。。。|矮油下雪了,自拍一下发微博|这孩子将来必成大器|这样子果然很屌呢~|把熊当宠物,胆儿不是一般大啊!|简直是比女司机更高一级的马路杀手。|天啊~我没看错吧!|这里滴山路十八弯,你敢走吗?|熊孩子,这下爽了。。。。。。。。。。|奢华又霸气的包子!!|你这蛇精,别以为穿个马甲我就不
[9个月前] 篮球场上九种坑爹队友 你是否躺着也中枪?打球时总有这么一拨人让我们不断想起这句话不怕神一样的对手,就怕他们这样的队友。【不传球】篮球场谁都不愿意和独狼合作,在防守到位时,除非你有很好的出手机会,不然把球分享出去是一个更好的选择。【防守不积极】曾经的比
[2年前] 坑爹啊!
[1年前] 坑爹啊
[2年前] 不相信化妆的女生进来看看,坑爹啊,不要相信化浓妆的女生。。。。。(来自哈哈安卓客户端)
[2年前] 真的不是我想黑你~~~但是你真的太坑爹了!买个会员想看看电影竟然还要收钱!老子以后把钱掉臭水沟也不给你!
[1年前] 坑爹啊
[9个月前] 传说中的坑爹~~~这回变成坑妈了!!!
[1年前] 真父亲的反击以前都是坑爹,终于来个坑儿子的。男子为违章亲戚助威骂交警 大喊我儿子是国防生 齐鲁网播放00:00/01:37全屏下载腾讯视频,看更多视频视频:男子违章大骂交警 叫嚣:我儿子是国防生,时长约1分37秒齐鲁网8月28日讯 前两年,我爸是李刚火遍了大江南
[2年前] 什么叫坑爹?这就是了
[2年前] 那些坑爹的神评论和神回复,哈哈哈哈哈哈
[2年前] 史上最坑爹的电梯。。。
[2年前] 比小学生更坑爹的生物来了!如果你的队友是小学生,请暗自庆幸吧
[2年前] 买了个吊扇,今天一试,坑爹了
[2年前] 坑爹呢?!(╯‵□)╯︵┻━┻
[1年前] 你变了。 你再也不是以前那个天真善良的屌丝了,以前的你爱笑爱撸管,还记得你在星空下告诉我,只要有片看,有纸擦,你可以什么都不要!再看看现在的你,一天到晚想着怎么装逼,怎样称霸装逼界,渐渐迷失了自己,,不要装逼了,好吗?答应我!
[2年前] AV女优背后的故事......你以为你们这些屌丝男看完AV,撸一管完事了,还挺舒心的,是吧?你看看人家的幕后心声
[1年前] 上大学真的可以改变一个人,让我们来看一个屌丝的华丽蜕变
[2年前] 注定是个屌丝的命。
[2年前] 女屌丝专用
[1年前] 你个臭屌丝
[2年前] 一张图告诉你,为什么屌丝单身一辈子!!
[2年前] 拿iPhone6装逼的屌丝们,装逼要用这个才可以啊。。。
[2年前] 囧~~~~屌丝神器啊!!!!!
[2年前] 土豪靠科技.屌丝靠变异
[2年前] 回归屌丝一身轻松……
[2年前] 屌丝最实在
[2年前] 屌丝神技 可惜女神无视了
[2年前] 纯屌丝!!!
[2年前] 屌丝与白富美的区别。。 看一次泪奔一次~~~!
[2年前] 新闻评论区除了普通屌丝,还有有3种人-美分-5毛-发广告的美分和发广告的都是手机用户。
[2年前] 据说这叫屌丝装,中外通用,穿着它去逛街毫无压力。
[1年前] 不要以为一个妹子有很多人追很牛逼,一个脏了的足球还有22个人追,他们的目的只是射门!
[2年前] 妹子发照片说她在洗脚.
[5个月前] 重庆石桥铺 赛博 因为卖翻新机器,妹子脱光索要辛苦钱。 哎所以我离开了那个坑。。。石桥铺的认真的有很多没良心 不过还有很多也讲良心~做了几年的 石桥铺生意 外地人最锤子。绝对真实空间别人发的短视频。。。
[1年前] 妹子这是要马震吗
[1年前] 给大家分享个视频陪 聊妹子 一对一的 服务非常好
[2年前] 游戏发布会的福利,模特妹子们穿紧身裤;亮点处处有呀。。。。
[2年前] 新浪微博真实的妹子:杜蕾斯魅惑z自己搜
[2年前] 妹子突然发现男友的这一幕这个就叫 三观尽毁 了吧
[1年前] 下面的妹子受不了了,要不你们都来骑我吧。。
[2年前] 真是风景如画呀,妹子你在哪里玩?告诉我,我去膜拜一下也好
[2年前] 夏日穿紧身裤的妹子千万要小心了!!
[2年前] 最右是个妹子,对吧?
[2年前] 仅需一根冰糕就能区分出萌妹子与女汉子...
[2年前] 美国17岁少年得知妹子跟自己铁哥们乱搞。满头绿光的他通过短信怒甩女友。而面对女友复合的要求,少年施展出各种图片攻击和表情嘲讽。后来他把对话截图发上推特,不料竟被疯转8万多次!如今这位毒舌的记仇少年粉丝暴涨了三万多,成了推特小红人。最后一张图片亮了。
[2年前] 一个美国妹子的COS
[2年前] 好多妹子拍照的时候都不知道怎么摆姿势,来看看这个你就会了!!
[2年前] 据说,软妹子和小弱受喜欢用食指刷屏幕,纯爷们和女汉子习惯用拇指刷屏幕。我是大拇指,还好还好,舒了一口气。。。
[2年前] 其实有的妹子喜欢奔放
[2年前] 转:街头采访世界杯会影响你的性生活吗?妹子们的回答亮了!第一次发帖
[2个月前] 转(真尼玛励志):这是一个励志的故事 三星Note7?
[2年前] 卧槽尼玛逼的,你松口、你松口啊
[2年前] 尼玛不是每个洗脚按摩的都会有那啥服务的嗷!!!lz昨天去了一家,被个大爷捏了两个钟呀!!!尼玛愣是没提有没有其他服务,哥一屌丝难道就真是来按摩的呀!心疼大洋呀!
[1年前] 睡尼玛比,起来嗨!
[1年前] 终于知道什么是种马了.......太尼玛凶残了
[2年前] 真的是尼玛#失恋六连拍# 跪了,简直无法直视!!年度最佳六连拍!
[2年前] 在某宝上买了一件衣服,尼玛!拆开时差点吓尿了!!!
[2年前] 尼玛。。。
[2年前] 姐,遇到新东方的就嫁了吧!尼玛,这广告吐槽无力啊亲。。。  服务员小哥儿的下一句话我都可以想象得到,你不嫁我嫁!  各种尼玛啊。。。  你让我们这些遇不到厨师的人情何以堪啊!!!
[1年前] 原来这就是所谓的叶良辰,尼玛我还以为是哪部电视剧里的台词
[2年前] 尼玛,后面的是贞子姐姐吗?吓死了~
[2年前] 去镇上网吧上网,尼玛,整个网吧里面,就我一个成年人
[2年前] 尼玛,昨天,和一同事出差回路。看到的一辆货车 ,我擦,吓老子一跳啊。
[2年前] 【技术贴之如何应付交警蜀黍】坐不下了坐不下了,哈哈哈,尼玛看一次笑尿一次!!
[2年前] 魂淡 这是谁家的车啊 尼玛的吓死我啦
[2年前] 尼玛这是什么鬼!!!看了老大会儿才反应过来...
[2年前] 尼玛,这假动作。。。太特么假了!!
[2年前] 尼玛!用西瓜装大肚吓人这种方式简直丧心病狂!!!吓尿了啊!!!
[2年前] 尼玛,李白你逗我玩呢?
[4个月前] 听说过齐B小短裙,莫非你这是勒B小短裤?
[2年前] 岁月是把杀猪刀,这是对长得漂亮的人说的,对那些长得丑的,岁月拿她们一点办法都没有。
[2年前] 还有王法吗?还有法律吗? 这是 电影《功夫》的台词 现在黑周星驰的这么多,再仔细看看功夫,原来话外有话。古人留下两句话:官府衙门八字开有理没钱莫进来。
[2年前] 这是女孩生前见过的最后4个人,你们能猜到谁是杀她的凶手吗
[1年前] 今天上哈 发现多了个什么手机特权可以 一次点10个赞,这是要干嘛。有没有哈友高手解释。(顺便再问下 图片上他们在玩什么游戏)
[4个月前] 这是一个有点诡异的图片....
[2年前] 这是顶什么?要这么穿
[2年前] 警查蜀黍这是手铐吗?怎么带到脚上了呢!你看她难受的老动来动去!
[1年前] 据说这是一所大学的大学生
[2年前] 这是玩具吗?
[2年前] 黄瓜面膜,我说孩子,这是多么在乎自己的脚啊
[2年前] 大哥你这是把你头当鸡窝了么?
[2年前] 这是我骗赞最成功的一回
[2年前] 仔细盯着看一会儿,这是往前开还是往后开呢?
[2年前] 这是静态图,但你的眼睛靠近屏幕,图片中间的光会变得更亮,远离屏幕光会变得更弱。
[2年前] 喂,这也太过分了吧~ 这是画尸体的线呢~!
[2年前] 儿时每到寒暑假都会遇到类似的事情,这是一个真实的故事。。。
[2年前] 看到了么!!!这是原创!!!!我不是搬运工!!耶!朋友突然问我,你当年高考的成绩够买一把多兰剑么?我笑抽了仔细想想,600分相当于一把多兰剑加上几个血瓶蓝瓶 500多分相当于一把多蓝剑加上一个血瓶肯定比带一把长剑的人有优势,更何况我带几个血瓶就出来了。
[2年前] 这是一个难过的故事!1093人阅读
Android(2)
超酷的计步器APP(一)——炫酷功能实现,自定义水波纹特效、自定义炫酷开始按钮、属性动画的综合体验
好久没写博客了,没给大家分享技术了,真是有些惭愧。这段时间我在找工作,今年Android的行情也不怎么好,再加上我又是一个应届生,所以呢,更是不好找了。但是我没有放弃,经过自己的不懈努力,还是找到了自己喜欢的Android工作,心里的一块石头终于落下了。但是迎接我来的是更多的挑战,我喜欢那种不断的挑战自我,在困难中让自己变得更强大的感觉。相信阳光总在风雨后,因为每一个你不满意的现在,都有一个你没有努力的曾经。所以我们一起努力,为了生活,生下来、活下去。
今天我们来一起学习一个很酷的小项目——计步器。
关于这个项目我想分两篇博客来和大家分享,一篇先来学习界面和功能中用到的自定义控件,下篇来实现动画和计步器连接起来开始计算步数的效果
我们先来看效果图。
是不是很酷很炫呢,哈哈,我觉得酷酷哒。
那么我们今天先来学习那个很酷的效果图的实现。
点击开始按钮,出现结束和暂停按钮,开始按钮隐藏,横线变波浪的效果
我们先新建一个Android项目,开始在main_activity.xml中书写布局
先来看这个布局的Component Tree
我们来写他的布局
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg4_dark_blackish_green"
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/activity_walking_backgroud"
android:orientation="vertical"&
&include layout="@layout/top_bar" /&
android:id="@+id/step_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="90dp"
android:textColor="@color/white"
android:textSize="70sp" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="18dp"
android:text="计算步数"
android:textColor="@color/white"
android:textSize="13sp" /&
&LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="35dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="50dp"
android:layout_marginTop="60dp"
android:orientation="horizontal"
android:weightSum="2"&
&RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"&
&ImageView
android:id="@+id/iv_calories"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:src="@mipmap/calories" /&
android:id="@+id/calories"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/iv_calories"
android:textColor="@color/white"
android:textSize="24sp" /&
android:id="@+id/tv_calories"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/calories"
android:layout_toRightOf="@id/iv_calories"
android:text="热量:千卡"
android:textColor="@color/white"
android:textSize="10sp" /&
&/RelativeLayout&
&RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"&
&ImageView
android:id="@+id/iv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:src="@mipmap/time" /&
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/iv_time"
android:text="0"
android:textColor="@color/white"
android:textSize="24sp" /&
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/time"
android:layout_toRightOf="@id/iv_time"
android:text="时间:分钟"
android:textColor="@color/white"
android:textSize="10sp" /&
&/RelativeLayout&
&/LinearLayout&
&/LinearLayout&
&com.adu.running.view.WaveView
android:id="@+id/wave_view"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="-20dp"
&RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="27dp"&
&com.adu.running.view.CircleButton
android:id="@+id/stop"
android:layout_width="94dp"
android:layout_height="94dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:text="结束"
android:textColor="@color/white"
android:visibility="gone"/&
&com.adu.running.view.CircleWaveButton
android:id="@+id/start"
android:layout_width="94dp"
android:layout_height="94dp"
android:layout_centerInParent="true"
android:textColor="@color/white"/&
&com.adu.running.view.CircleButton
android:id="@+id/bt_continue"
android:layout_width="94dp"
android:layout_height="94dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:text="暂停"
android:textColor="@color/white"
android:visibility="gone"/&
&/RelativeLayout&
&/LinearLayout&
如果你直接复制上面的代码到你的项目中肯定会报错的,因为上面的布局中我们引用了一个自定义的toolbar布局和几个颜色值,还有几个自定义View
一会我会把代码给大家传上去,或者直接看我
我们现在看下面的三个自定义View怎么来完成的
WaveView.java自定义波纹类
package com.adu.running.
import android.content.C
import android.graphics.C
import android.graphics.P
import android.graphics.P
import android.os.H
import android.os.M
import android.util.AttributeS
import android.view.V
* Created by adu on .
public class WaveView extends View {
private int waveColor = 0xff0099CC;
private float swing = 0;
private int
private int
private int ms = 30;
private float isPause=0f;
private boolean isRun = false;
private Paint waveP
private Path path1;
private Path path2;
private Path path3;
public WaveView(Context context) {
super(context);
public WaveView(Context context, AttributeSet attrs) {
super(context, attrs);
public WaveView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
private void init() {
wavePaint = new Paint();
wavePaint.setAntiAlias(true);
wavePaint.setColor(waveColor);
wavePaint.setStrokeWidth(5);
wavePaint.setStyle(Paint.Style.STROKE);
path1 = new Path();
path2 = new Path();
path3 = new Path();
* 计算view高度宽度大小
* widthMeasureSpec
* heightMeasureSpec
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
initLayoutParams();
private void initLayoutParams() {
height = this.getHeight();
width = this.getWidth();
@Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
setPath();
wavePaint.setStrokeWidth(6);
wavePaint.setAlpha(100);
canvas.drawPath(path1, wavePaint);
wavePaint.setStrokeWidth(3);
wavePaint.setAlpha(80);
canvas.drawPath(path2, wavePaint);
wavePaint.setAlpha(60);
canvas.drawPath(path3, wavePaint);
* 设置三个线条上下震动的振幅
private void setPath() {
int x = 0;
int y = 0;
path1.reset();
for (int i = 0; i & i++) {
y = (int) (isPause*40* Math.sin(i * 2*0.7f * Math.PI / width+swing) + height*0.5);
if (i == 0) {
path1.moveTo(x, y);
path1.quadTo(x, y, x + 1, y);
path2.reset();
for (int i = 0; i & i++) {
y = (int) (isPause*40* Math.sin(i * 2*0.7f * Math.PI / width+swing+0.3f) + height*0.5);
if (i == 0) {
path2.moveTo(x, y);
path2.quadTo(x, y, x + 1, y);
path3.reset();
for (int i = 0; i & i++) {
y = (int) (isPause*40* Math.sin(i * 2*0.7f * Math.PI / width+swing+0.3f) + height*0.5);
if (i == 0) {
path3.moveTo(x, y);
path3.quadTo(x, y, x + 1, y);
path1.close();
path2.close();
path3.close();
public void start(){
this.isRun=true;
this.isPause=1.0f;
new MyThread().start();
public void stop(){
this.isRun=false;
this.isPause=0.0f;
invalidate();
private class MyThread extends Thread {
public void run() {
while (isRun) {
swing+=-0.25f;
mHandler.sendEmptyMessage(1);
Thread.sleep(ms);
} catch (InterruptedException e) {
e.printStackTrace();
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
invalidate();
让我们在MainActivity的布局中新建两个Button按钮开对自定义波纹类进行测试,分别调用它的start( )和stop( )方法,运行结果如下:
点击开始,波纹会上下起伏,点击停止,它会恢复到停止状态
接着,我们看下面的三个按钮是怎么实现的,其实是两个自定义的Button
CircleWaveButton.java 开始按钮
package com.adu.running.
import android.content.C
import android.graphics.C
import android.graphics.P
import android.graphics.RadialG
import android.graphics.S
import android.os.H
import android.os.M
import android.util.AttributeS
import android.widget.B
import com.adu.running.R;
* Created by adu on .
public class CircleWaveButton extends Button{
private int paintColor= R.color.circle_bule_bbd4e7;
private Paint paint = new Paint();
private Paint textPaint = new Paint();
private int radiusInt = 0;
private String text="开始";
private Boolean isStart = false;
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
invalidate();
if (isStart) {
radiusInt++;
if (radiusInt & 50) {
radiusInt = 0;
sendEmptyMessageDelayed(0, 20);
public CircleWaveButton(Context context) {
super(context);
public CircleWaveButton(Context context, AttributeSet attrs) {
super(context, attrs);
public CircleWaveButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
private void init() {
setBackgroundColor(getResources().getColor(R.color.running));
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int centre = getWidth() / 2;
int radius =
Paint newPaint = new Paint();
newPaint.setAntiAlias(true);
newPaint.setStyle(Paint.Style.FILL);
Shader shader = new RadialGradient(centre, centre, radius, getResources().getColor(paintColor), getResources().getColor(R.color.running), Shader.TileMode.CLAMP);
newPaint.setShader(shader);
canvas.drawCircle(centre, centre, radius, newPaint);
paint.setColor(getResources().getColor(paintColor));
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
for(int i=1;i&=5;i++){
paint.setAlpha(20*i);
canvas.drawCircle(centre, centre, radius * (10- i)/ 10, paint);
paint.setColor(getResources().getColor(paintColor));
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(radius * 2 / 12);
for(int i=0;i&3;i++) {
paint.setAlpha(60-i*20);
canvas.drawCircle(centre, centre, radius * (14-i*2 + radiusInt / 50.0f) / 16, paint);
textPaint.setTextSize(getTextSize());
textPaint.setAntiAlias(true);
textPaint.setStyle(Paint.Style.FILL);
textPaint.setColor(getTextColors().getDefaultColor());
float length = textPaint.measureText(text);
canvas.drawText(text, centre - length / 2, centre + getTextSize() / 3, textPaint);
public void start() {
isStart = true;
handler.sendEmptyMessage(0);
public void stop() {
isStart = false;
handler.removeMessages(0);
我们在MainActivity设置CircleWaveButton的点击事件调用它的start( )方法,会看到下面的效果
下面我们看最后一个自定义Button,结束的Button和暂停的Button只是颜色不一样,其他都是一样的。
CircleButton.xml暂停结束按钮
package com.adu.running.
import android.content.C
import android.graphics.C
import android.graphics.P
import android.util.AttributeS
import android.widget.B
import com.adu.running.R;
* Created by adu on .
public class CircleButton extends Button {
private Paint paint = new Paint();
private Paint textPaint = new Paint();
private int
public CircleButton(Context context) {
super(context);
public CircleButton(Context context, AttributeSet attrs) {
super(context, attrs);
public CircleButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
private void init() {
setBackgroundColor(getResources().getColor(R.color.running));
color=getResources().getColor(R.color.running);
@Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int centre = getWidth() / 2;
int radius =
paint.setColor(color);
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
canvas.drawCircle(centre, centre, radius, paint);
textPaint.setTextSize(getTextSize());
textPaint.setAntiAlias(true);
textPaint.setStyle(Paint.Style.FILL);
textPaint.setColor(getTextColors().getDefaultColor());
float length = textPaint.measureText(getText().toString());
canvas.drawText(getText().toString(), centre - length / 2, centre + getTextSize() / 3, textPaint);
public void setPaintColor(int color) {
this.color = getResources().getColor(color);
我们就不在测试这个Button了,直接写开始的那个效果
点击开始按钮,然后隐藏它,一个动画的效果出现结束和暂停按钮,并且开启波纹,点暂停波纹停止,点击结束退出。
我们之间在MainActivity中写代码
package com.adu.
import android.animation.A
import android.animation.AnimatorS
import android.animation.ObjectA
import android.content.C
import android.graphics.P
import android.os.B
import android.support.v7.app.AppCompatA
import android.view.D
import android.view.V
import android.view.WindowM
import android.view.animation.DecelerateI
import butterknife.BindV
import butterknife.ButterK
import butterknife.OnC
import com.adu.running.view.CircleB
import com.adu.running.view.CircleWaveB
import com.adu.running.view.WaveV
public class MainActivity extends AppCompatActivity {
@BindView(R.id.wave_view) WaveView waveV
@BindView(R.id.startButton) CircleWaveButton startB
@BindView(R.id.stop) CircleButton stopB
@BindView(R.id.bt_continue) CircleButton btC
private boolean isPause = false;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initView();
private void initView() {
btContinue.setPaintColor(R.color.text_color_1e78be);
startButton.setPaintColor(R.color.circle_bule_bbd4e7);
stopButton.setPaintColor(R.color.circle_red_cd3a33);
startButton.start();
@OnClick({ R.id.stop, R.id.startButton, R.id.bt_continue })
public void onClick(View view) {
switch (view.getId()) {
case R.id.stop:
System.exit(0);
case R.id.startButton:
startAnimation();
waveView.start();
case R.id.bt_continue:
if (isPause){
btContinue.setText("暂停");
isPause = false;
waveView.start();
btContinue.setText("继续");
isPause = true;
waveView.stop();
* 按钮动画效果实现的方法
private void startAnimation() {
btContinue.setVisibility(View.VISIBLE);
stopButton.setVisibility(View.VISIBLE);
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
Animator animatorStart = ObjectAnimator.ofFloat(startButton, "alpha", 1.0f, 0f);
AnimatorSet animatorSetStart = new AnimatorSet();
animatorSetStart.playTogether(animatorStart);
animatorSetStart.setInterpolator(new DecelerateInterpolator());
animatorSetStart.setDuration(1000);
Animator animatorContinue1 = ObjectAnimator.ofFloat(btContinue, "alpha", 0f, 1.0f);
animatorContinue1.setDuration(3000);
Animator animatorContinue2 = ObjectAnimator.ofFloat(btContinue, "translationX", -width / 3, btContinue.getX());
animatorContinue2.setDuration(2000);
AnimatorSet animatorSetContinue = new AnimatorSet();
animatorSetContinue.playTogether(animatorContinue1, animatorContinue2);
animatorSetContinue.setInterpolator(new DecelerateInterpolator());
Animator animatorStop1 = ObjectAnimator.ofFloat(stopButton, "alpha", 0f, 1.0f);
animatorStop1.setDuration(3000);
Animator animatorStop2 = ObjectAnimator.ofFloat(stopButton, "translationX", width / 3, 0);
animatorStop2.setDuration(2000);
AnimatorSet animatorSetStop = new AnimatorSet();
animatorSetStop.playTogether(animatorStop1, animatorStop2);
animatorSetStop.setInterpolator(new DecelerateInterpolator());
animatorSetStart.start();
animatorSetStop.start();
animatorSetContinue.start();
startButton.setVisibility(View.GONE);
我们运行代码,看看效果
我们就简单的完成了一个这样的动画效果,看起来还是蛮酷的嘛。
这篇博客,我们主要学习了三个自定义View的实现,然后组合在一起形成一个很酷的效果。
下篇博客,我开始给大家讲这个动画和计步器连接起来开始计算步数的效果
我把这篇博客的Demo上传到这里,如果想直接看完整的动画和计步器的代码,请大家看我的,如果喜欢的话可以star一下,谢谢大家的支持
欢迎有兴趣的同学加我朋友的QQ群: 我们一起来玩吧。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:17334次
排名:千里之外
原创:34篇
评论:34条
文章:30篇
阅读:15329
每一个你不满意的现在,都有一个你没有努力的曾经。
(9)(6)(14)(1)(3)(1)

我要回帖

更多关于 酷6网是不是要倒闭了 的文章

 

随机推荐