第二篇 根据识别的结果 我们可以访问一些网络 先写一个水波纹UI
2017-12-10 10:29
501 查看
<com.example.admin.tim.UI.FingerWaveView android:id="@+id/view_custom" android:layout_width="140dp" android:layout_height="140dp" android:layout_centerInParent="true" /> <ImageView android:id="@+id/iv" android:layout_width="60dp" android:layout_height="60dp" android:layout_centerInParent="true" android:src="@mipmap/ic_finger_status" /> <TextView android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:id="@+id/tv_finger_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/iv" android:text="我是个可爱的麦克风" android:textColor="#fd7a72"android:textSize="12sp" />当然ImageView的图片可以自定义public class FingerWaveView extends View {private Ima676ageView image;private TextView textView;private View view;private int start;private Paint mPaint;// 中心点x 坐标, 和 Y 坐标private int mCenterX;private int mCenterY;// 开始绘制的圆的半径 : 默认 183dpprivate int mStartRadius;// 结束绘制的圆的半径private int mEndRadius;// 动画执行的时间private final long mDuration = 1000;// 变化时的圆的半径, 这个是变值...private int mCurrentRadius;// 圆环的半径, = 最大圆的半径 - 最小圆的半径(开始是的半径)private int mDurationWidth;private final int mStartAlpha = 100;private ValueAnimator mValueAnimator;public viewChangeListener viewChangeListener=new viewChangeListener() {@Overridepublic void viewStart() {mStartRadius=start;view.setVisibility(VISIBLE);start();}@Overridepublic void viewEnd() {stop();view.setVisibility(GONE);}};public FingerWaveView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.FingerCaveImageView);mStartRadius = (int)(ta.getDimension(R.styleable.FingerCaveImageView_cave_radius,-1f)+0.5f);start=mStartRadius;init();}// 初始化操作...private void init() {mPaint = new Paint();mPaint.setColor(ContextCompat.getColor(getContext(), R.color.wave_color));mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));// 设置锯齿mPaint.setAntiAlias(true);// 创建一个属性动画, 从0 过度到 1mValueAnimator = ValueAnimator.ofFloat(0, 1.0f);// 设置时长mValueAnimator.setDuration(mDuration);// 重复次数为无限...mValueAnimator.setRepeatCount(ValueAnimator.INFINITE);// 线性插值器mValueAnimator.setInterpolator(new LinearInterpolator());//初始化image=(ImageView)findViewById(R.id.iv);textView=(TextView)findViewById(R.id.tv_finger_status);// 监听过程, 在过程中处理参数变化mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {float value = (float) valueAnimator.getAnimatedValue();mCurrentRadius = (int) (mStartRadius + mDurationWidth * value + 0.5);// 开始重新绘制postInvalidate();}});view=(View)findViewById(R.id.view_custom);view.setVisibility(GONE);((MainActivity)getContext()).getListener(viewChangeListener);}@Overrideprotected void onFinishInflate() {super.onFinishInflate();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);mCenterX = getMeasuredWidth() / 2;mCenterY = getMeasuredHeight() / 2;// 结束 绘制圆的半径为控件总宽度 高度, 的一般mEndRadius = Math.min(getMeasuredWidth(), getMeasuredHeight()) / 2;mDurationWidth = mEndRadius - mStartRadius;}@Overrideprotected void onDraw(Canvas canvas) {// 绘制第一个圆int secondRadius = mCurrentRadius + (int) (mDurationWidth / 2.0f + 0.5f);if (secondRadius > mEndRadius) {secondRadius = mStartRadius + secondRadius - mEndRadius;}int secondAlpha = (int) (mStartAlpha * (1 - (secondRadius - mStartRadius) * 1.0f / mDurationWidth) + 0.5);mPaint.setAlpha(secondAlpha);canvas.drawCircle(mCenterX, mCenterY, secondRadius, mPaint);// 绘制第三个圆int thirdRadius = mCurrentRadius + (int) (mDurationWidth / 2.0f * 2 + 0.5f);if (thirdRadius > mEndRadius) {thirdRadius = mStartRadius + thirdRadius - mEndRadius;}int thirdAlpha = (int) (mStartAlpha * (1 - (thirdRadius - mStartRadius) * 1.0f / mDurationWidth) + 0.5);mPaint.setAlpha(thirdAlpha);canvas.drawCircle(mCenterX, mCenterY, thirdRadius, mPaint);}public void stop() {mValueAnimator.end();}public void start() {mValueAnimator.start();}}关于Listener在MainActivity中private com.example.admin.tim.interfacee.viewChangeListener viewChangeListener;public void getListener(viewChangeListener viewChangeListener){this.viewChangeListener=viewChangeListener;}
((MainActivity)getContext()).getListener(viewChangeListener);
相关文章推荐
- LoadImage一个从网络访问图片,并存到缓存(内存,磁盘)直接可以用
- 模拟AP与可以访问互联网的网络连接,虚拟出一个“无线路由器”
- 事件代理总结: 已经有一些使用主流类库的事件代理示例出现了,比如说jQuery、Prototype以及Yahoo! UI。你也可以找到那些不用任何类库的例子,比如说Usable Type blog上的这一个。一旦需要的话,事件代理将是你工具箱里的一件得心应手的工具,而且它很容易实现。
- 静态默认路由 可以在网络边缘通过一个路由器端口访问每一个pc机
- 完成一个应用,用户可以根据自己输入的地址下载网络上的图片和网页信息
- 关于PC可以识别并连接网络,但却无法访问问题
- 共享一些可以通过网络访问的MPT地址
- 安卓完成一个应用,用户可以根据自己输入的地址下载网络上的图片和网页信息
- Golang 中使用 JSON 的一些小技巧 陶文 陶文 3 个月前 有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用。 本来用一个json:",string" 就可以支持了
- 网络-Netty(一)-NIO概念Channel是一个对象,可以通过它读取和写入数据。可以把它看做IO中的流。但是它和流相比还有一些不同:
- 周鸿祎,高司令 2010-09-28 00:41 27469人阅读 评论(185) 收藏 举报 还是感到有必要将自己的一些想法快速记下来。 首先是对周鸿祎新员工演讲的看法。 就说实话这一点来说,周鸿祎比很多人强。所以我比较喜欢引用他的话,确实比较实在,不装逼。 至于一个公司招人的风格,是公司自己定的,别人也无权评价。有人说周是画大饼,忽悠员工卖命。废话,难道新员工讲话还有别的目的吗? 但我不认为周的选人思路在别的公司可以通行。原因是这样的:近十几年来,我们听到很多人有类似的说法,比如我们公司不要
- 你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节约的
- 现在,有两个整数A和B,例如A是345,B是478,现在,需要把B插入到A里, 而A有三位,所以有四个位置选择,所得结果分别是: 478345, 347845, 344785, 345478 我们通过对比可以知道,在这当中最小的一个是344785
- 已知某公司总人数为W,平均年龄为Y岁(每年3月末计算,同时每年3月初入职新人),假设每年离职率为x,x>0&&x<1,每年保持所有员工总数不变进行招聘,新员工平均年龄21岁。 从今年3月末开始,请实现一个算法,可以计算出第N年后公司员工的平均年龄。(最后结果向上取整)。
- 为什么我们同时搞acm,结果是你就可以去final
- Eclipse从SVN检出maven项目后的一些配置 Eclipse从SVN检出maven项目后,会发现它只是一个普通的java project,如图: 这里我们需要把它转成maven-weba
- 假设一个值是0.7,那么我们把它造型成一个char,那么结果到底是30还是29呢?
- 腾讯 2017 暑假实习生编程题(一):给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- 让远程主机可以通过网络访问sshd服务
- 为什么我们可以在非UI线程中更新UI