<!--android:layout_alignParentTop="true"-->
<com.koooke.platform.View.CenterImage
android:id="@+id/centerImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_gravity="center_horizontal"
android:layout_marginEnd="154dp"
android:scaleType="centerCrop"
android:src="@drawable/koookelogo" />
package com.koooke.platform.View;

import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.animation.LinearInterpolator; import com.koooke.platform.R; /**
* Created by Uniway_125 on 2017/11/27 0027.
*/ public class CenterImage extends android.support.v7.widget.AppCompatImageView {
private Paint paint;
private boolean isCenterImgShow;
private Bitmap bitmap;
public void setCenterImgShow(boolean centerImgShow) {
isCenterImgShow = centerImgShow;
if (isCenterImgShow) {
bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
invalidate();
}
bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
}
public CenterImage(Context context) {
super(context);
init();
}
public CenterImage(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CenterImage(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
paint = new Paint();
isDrawPoint = true;
}
private boolean isInit = false; private ValueAnimator animator; /********
* 计算圆弧点上的坐标
* 公式:Math.sin(x) x 的正玄值。返回值在 -1.0 到 1.0 之间;
* Math.cos(x) x 的余弦值。返回的是 -1.0 到 1.0 之间的数;
* <p>
* X指的是弧度 因此
* <p>
* 30° 角度 的弧度 = 2*PI/360*30
* <p>
* 圆上每个点的X坐标=a + Math.sin(2*Math.PI / 360) * r
* Y坐标=b + Math.cos(2*Math.PI / 360) * r ;
**************/
private boolean isDrawPoint = false;
public void setDrawPoint(boolean drawPoint) {
isDrawPoint = drawPoint;
}
// @Override
// protected void onDraw(Canvas canvas) {
// super.onDraw(canvas);
// if ( bitmap != null) {
//
// System.out.println(String.format("wight %d,height %d",getWidth(),getHeight()));
// Paint paint2 = new Paint();
// paint2.setStyle(Paint.Style.FILL);
// paint2.setColor(Color.WHITE);
// canvas.drawCircle( getMeasuredWidth()/2 , 3 ,smallBallWidth, paint2);
// //canvas.drawBitmap(bitmap, getMeasuredWidth() / 2 +50, getMeasuredHeight(), paint);
// Paint paint3 = new Paint();
// paint3.setStyle(Paint.Style.FILL);
// paint3.setColor(Color.WHITE);
//
// canvas.drawCircle( getMeasuredWidth()/2 , getMeasuredHeight()-3,smallBallWidth, paint3);
// }
// }
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
r = getMeasuredWidth()/2;
Paint paint2 = new Paint();
paint2.setStyle(Paint.Style.FILL);
paint2.setColor(Color.WHITE);
canvas.drawCircle( getMeasuredWidth()/2 , smallBallWidth ,smallBallWidth, paint2); //canvas.drawBitmap(bitmap, getMeasuredWidth() / 2 +50, getMeasuredHeight(), paint);
Paint paint3 = new Paint();
paint3.setStyle(Paint.Style.FILL);
paint3.setColor(Color.WHITE);
canvas.drawCircle( getMeasuredWidth()/2 , getMeasuredHeight()-smallBallWidth,smallBallWidth, paint3); }
private void MathDisc(Canvas canvas,Paint inputPaint,float base ) { //angle 角度 float hudu = (float) ((2 * Math.PI / 360) * (angle))+base; // 360/8=45,即45度(这个随个人设置)
float X = (float) (r + smallBallWidth + Math.sin(hudu) * r); // r+5 是圆形中心的坐标X 即定位left 的值
float Y = (float) (r + smallBallWidth - Math.cos(hudu) * r); // r+5 是圆形中心的坐标Y 即定位top 的值
System.out.println(String.format("X = %f y = %f",X, Y));
canvas.drawCircle(X, Y, smallBallWidth, inputPaint);
canvas.restore(); }
private int r = 0;//半径
private int smallBallWidth = 4;
/********
* 计算圆弧点上的坐标
* 公式:Math.sin(x) x 的正玄值。返回值在 -1.0 到 1.0 之间;
* Math.cos(x) x 的余弦值。返回的是 -1.0 到 1.0 之间的数;
* <p>
* X指的是弧度 因此
* <p>
* 30° 角度 的弧度 = 2*PI/360*30
* <p>
* 圆上每个点的X坐标=a + Math.sin(2*Math.PI / 360) * r
* Y坐标=b + Math.cos(2*Math.PI / 360) * r ;
**************/
// private void MathDisc(Canvas canvas) { //angle 角度
// if (isDrawPoint) {
// float hudu = (float) ((2 * Math.PI / 360) * (angle)); // 360/8=45,即45度(这个随个人设置)
// float X = (float) (r + 5 + Math.sin(hudu) * r); // r+5 是圆形中心的坐标X 即定位left 的值
// float Y = (float) (r + 5 - Math.cos(hudu) * r); // r+5 是圆形中心的坐标Y 即定位top 的值
// canvas.drawCircle(X, Y, smallBallWidth, circleRing);
// canvas.restore();
// }
// } private float angle = 0;
public void startAnimation() {
animator = ValueAnimator.ofFloat(0, 1.0f);
//动画时长,让进度条在CountDown时间内正好从0-360走完,
animator.setDuration(1000);
animator.setInterpolator(new LinearInterpolator());//匀速
animator.setRepeatCount(-1);//表示不循环,-1表示无限循环
//值从0-1.0F 的动画,动画时长为countdownTime,ValueAnimator没有跟任何的控件相关联,那也正好说明ValueAnimator只是对值做动画运算,而不是针对控件的,我们需要监听ValueAnimator的动画过程来自己对控件做操作
//添加监听器,监听动画过程中值的实时变化(animation.getAnimatedValue()得到的值就是0-1.0)
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
/**
* 这里我们已经知道ValueAnimator只是对值做动画运算,而不是针对控件的,因为我们设置的区间值为0-1.0f
* 所以animation.getAnimatedValue()得到的值也是在[0.0-1.0]区间,而我们在画进度条弧度时,设置的当前角度为360*currentAngle,
* 因此,当我们的区间值变为1.0的时候弧度刚好转了360度
*/
angle = 360 * (float) animation.getAnimatedValue();
invalidate();//实时刷新view,这样我们的进度条弧度就动起来了
}
});
//开启动画
animator.start();
}
}

android测试Code的更多相关文章

  1. 【Android测试】【随笔】模拟双指点击

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5258660.html 手势 看到这个标题,很多人会想一想 ...

  2. 【Android测试】【随笔】模拟长按电源键

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5195121.html 起因 昨天群里看到有人问如何实现一个 ...

  3. 5个最佳的Android测试框架(带示例)

    谷歌的Android生态系统正在不断地迅速扩张.有证据表明,新的移动OEM正在攻陷世界的每一个角落,不同的屏幕尺寸.ROM /固件.芯片组以及等等等等,层出不穷.于是乎,对于Android开发人员而言 ...

  4. Android Secret Code

    我们很多人应该都做过这样的操作,打开拨号键盘输入*#*#4636#*#*等字符就会弹出一个界面显示手机相关的一些信息,这个功能在Android中被称为android secret code,除了这些系 ...

  5. Android测试提升效率批处理脚本(三)

    前言: 前面放出过几次批处理,这次只放一个环境检查的被管理员给打回来了,不得不再找找几个有含金量的放出来,请看正文~~~ 目录 1.Android环境检查 2.Android内存监控 3.模拟蓝牙手柄 ...

  6. Android测试基础题(三)

    今天接着给大家带来的是Android测试基础题(三).    需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...

  7. Android测试提升效率批处理脚本(二)

    前言: 前面放出过一次批处理,本次再放出一些比较有用的批处理(获得当前包名.查看APP签名信息等),好长时没来写博客了,简单化,请看正文,更多脚本尽请期待~~~(不定期) 目录 1.[手机录屏(安卓4 ...

  8. iOS 和 Android 测试托管平台 FIR.im 的注册与常用功能

    FIR.im  作为专业的 iOS 和 Android 测试包发布网站, 注册超简单,支持输入网址直接下载和二维码扫描下载.功能类似 TestFlight ,但又比它强大,支持游客访问密码,iOS 和 ...

  9. 【Android测试】【第十七节】Instrumentation——App任你摆布(反射技术的引入)

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/5569844.html 前言 学习了上节之后,大家是否已经 ...

随机推荐

  1. Spark & Python

    技术文章 https://www.cnblogs.com/yangzhang-home/p/6056133.html 基于Python Spark的推荐系统 https://blog.csdn.net ...

  2. Servlet入门小案例

    案例一:tomcat9.jdk1.8 1.eclipse创建web项目 1)创建一个Dynamic web project,名字为Servlet_hjh 2)在src下创建一个包,为com.hjh.d ...

  3. webpack+vue解决前端跨域问题

    webpack 跨域,在这里整理了一下逻辑首先不是为了axios库来进行跨域的,而是直接通过node的webpack设置代理来完成跨域的. 先贴一条自己请求的连接 1.设置自定义域: 在config目 ...

  4. https迁移实践手记

    前言什么是公钥和私钥?使用OpenssL生成私钥.使用Keytool导出私钥.主流数字证书都有哪些格式?SSL证书类型注册SSL证书使用OpenSSL工具生成CSR文件使用keytool工具生成CSR ...

  5. Android中Service与多个Activity通信

    由于项目需要,我们有时候需要在service中处理耗时操作,然后将结果发送给activity以更新状态.通常情况下,我们只需要在一个service与一个activity之间通信,通常这种情况下,我们使 ...

  6. (转)expect命令脚本语言介绍及生产实践

    原文:http://www.fblinux.com/?p=526 Expect介绍 expect是一个用来实现自动交互功能的软件套件,是用来实现自动和交互式任务程序进行通信,无需人的手工干预.比如SS ...

  7. MySQL插入记录 insert

    一.insert insert tb_name [(col_name,......)] {values | value} ({expr | default } ....... ) , ( ... ) ...

  8. 自动化测试之旅--selenium+python--001

    在学习selenium之前,首先感谢网络上的虫师和乙醇老师,或许他们并不知道我这个菜鸟的存在,但是我仍然要感谢他们,因为在学习的路上拜读了许多他们的博客和文章,对于我来说有着很重要的意义,因此在学习之 ...

  9. Cucumber capybara 每个Scenario登陆一次

    hook.rb中添加: After do |scenario| Capybara.current_session.instance_variable_set(:@touched, false)end ...

  10. bzoj 4540: [Hnoi2016]序列

    Description 给定长度为n的序列:a1,a2,-,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,-,ar- 1,ar.若1≤l≤s≤t≤r≤n,则称 ...