<!--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. nginx响应码

    ngx.status = ngx.HTTP_CONTINUE (100) (first added in the v0.9.20 release)ngx.status = ngx.HTTP_SWITC ...

  2. 溶解shader

    玩神界原罪2,感觉人物被建筑遮挡时,建筑的“溶解”效果很有意思,想实现一下.然后发现连溶解都没实现过,emmmmm....先来把溶解实现了~ 原理就是根据一张噪声图的值是否大于某个阈值,来判断是否丢弃 ...

  3. 查看SqlServer某张表的物理空间占用情况

    以下语句可以查看表的物理空间使用情况 包括 [ROWS] 内容的行数.. [reserved] 保留的磁盘大小.. [data] 数据占用的磁盘大小.. [index_size] 索引占用的磁盘大小. ...

  4. openerp学习笔记 domain 的应用

    1.在Action中定义,domain用于对象默认的搜索条件: 示例: <record id="action_orders" model="ir.actions.a ...

  5. Robot Framework环境搭建(问题总结)

    Robot Framework+python+wxpython+robotframework-ride+library环境搭建问题总结 因为robotframework的兼容性问题要求很严格,小编在环 ...

  6. 关于ie8兼容性问题的处理

    1.replace将单引号变成双引号 var page=user.customConfig.replace(/\‘|’/ig,"\""); 兼容谷歌和ie var pag ...

  7. Mac开发利器之程序员编辑器MacVim学习总结(转)

    一.关于Vim   Emacs和Vim都是程序员专用编辑器,Emacs被称为神的编辑器,Vim则是编辑器之神.至于两者到底哪个更好用,网络上两大派系至今还争论不休.不过,相比之下,Emacs更加复杂, ...

  8. Django的学习基础1

    著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. Django的MTV模式本质上与MVC模式没有什么差别,也是 ...

  9. Timer 控件

    1. 设置属性 Enable = true  或调用 start方法后, *_Tick 方法不会立即执行,会先等待一个时间间隔 2.timer1不管你上次的事情是否做完,它都会每个一个时间间隔做它应该 ...

  10. Java如何实现form表单提交的数据自动对应实体类(源码)

    原文出自:https://blog.csdn.net/seesun2012 原生Java+JQuery form表单serializeArray提交自动对应java实体,这是一个实际的例子: html ...