android旋转不重绘,Android自定义view仿微信刷新旋转小风车
本文实例为大家分享了Android仿微信刷新旋转小风车 具体代码,供大家参考,具体内容如下
不太会录像,没办法,智能截图了
不多说了,直接上代码
package com.shipneg.demoysp.demo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.CountDownTimer;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;
/**
* Created by dell on 2017/4/7.
*/
public class RotationView extends ImageView {
/**
* 要转动的图片
**/
private Bitmap bitMap;
/**
* 风车每次转动的弧度
**/
private int rad = 0;
/**
* 风车移动的轨迹
**/
private int excursion = -100;
/**
* 图片的宽度:在这里提供的是正方形的图片,所以宽度和高度是一样的
**/
private int width = 0;
/***
* 图片的高度:在这里提供的是正方形的图片,所以宽度和高度是一样的
**/
private int height = 0;
/**
* 定义一个画笔
**/
private Paint paint = new Paint();
public RotationView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RotationView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public RotationView(Context context) {
super(context);
}
/**
* 获取图片的宽和高
*/
public void initSize() {
width = bitMap.getWidth();
height = bitMap.getHeight();
postInvalidate();
}
public void setBitMap(Bitmap bitMap) {
this.bitMap = bitMap;
}
//一图片的宽和高来设定自定义View的宽和高,由于是正方形宽和高是一样的
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
}
CountDownTimer c = new CountDownTimer(5000, 10) {
@Override
public void onTick(long millisUntilFinished) {
postInvalidate();
rad = rad + 7;
}
@Override
public void onFinish() {
downY = 0;
excursion = -100;
postInvalidate();
}
};
/***
* 实现onDraw方法把风车图片绘制出来,同时绘制出来风车的旋转效果,通过Matrix来控制
*/
@Override
protected void onDraw(Canvas canvas) {
Matrix matrix = new Matrix();
// 设置转轴位置
matrix.setTranslate((float) width / 2, (float) height / 2);
// rad -=15;//每次旋转的弧度增量为3当然,数字越大转动越快
// 开始转
matrix.preRotate(rad);
// 开始平移
matrix.postTranslate(0, excursion);
// 转轴还原
matrix.preTranslate(-(float) width / 2, -(float) height / 2);
//绘制风车图片
canvas.drawBitmap(bitMap, matrix, paint);
super.onDraw(canvas);
}
private int downY = 0;
private int moveY = 0;
private int abc = 0;
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN://随着手指的move而不断进行重绘,进而让风车转动起来
postInvalidate();//调用方法进行重绘
downY = (int) event.getY();
c.cancel();
break;
case MotionEvent.ACTION_MOVE://随着手指的move而不断进行重绘,进而让风车转动起来
//调用方法进行重绘
int movey2 = moveY;
rad = (int) -event.getY() * 6;//旋转的速度
moveY = (int) (event.getY() - downY);//手指移动的距离
int chz = moveY - movey2;
if (chz > 10) {
chz = chz / 10;
} else if (chz < -10) {
chz = chz / 10;
}
Log.e("TAG:" + excursion, "chz: " + chz + "//moveY:" + moveY + "//movey2:" + movey2);
//100是向下滑动的最大距离
if (excursion >= 100) {
abc = abc + chz;
if (chz < 0 && abc - chz < 0) {
excursion = excursion + chz;
}
} else {
//开始向下运动
excursion += chz;
}
postInvalidate();
c.cancel();
break;
case MotionEvent.ACTION_UP:
c.start();
break;
}
return true;
}
}
调用方法
//调用的方法
RotationView rotation = (RotationView) view.findViewById(R.id.rotationView);
BitmapDrawable drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.fengche);
rotation.setBitMap(drawable.getBitmap());
rotation.initSize();
图片资源自己切的,本人不会ps,所以有点切的不太好,见谅
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
android旋转不重绘,Android自定义view仿微信刷新旋转小风车相关推荐
- Android 仿微信刷新旋转小风车 自定义view
不太会录像,没办法,智能截图了 不多说了,直接上代码 package com.shipneg.demoysp.demo;import android.content.Context; import a ...
- android记账本折线图_Android自定义View - 仿支付宝月账单折线图
前言 支付宝有个查看月账单的功能,最近一直在学习自定义View,于是就尝试着自己实现了一个类似的折线图. 下面是支付宝消费分析功能截图和自己实现的折线效果截图: 支付宝消费分析折线图.jpg 效果1. ...
- Android 自定义View 仿微信好友,字母排序
一 :具体说下思路(注意:一下代码如果没有显示则访问 https://www.jianshu.com/p/2da89b56871f ) 1 :整体用到的控件,list view(recyc ...
- 自定义view,仿微信、支付宝密码输入控件的源码实现
研究支付宝密码输入控件及源码实现 目标效果图 实现思路 要想实现输入,就少不了EditText 看整体布局应该是一个横向的LinearLayout 每个格子看进来应该是多个子View 那么我们是不是有 ...
- [GitHub开源]Android自定义View实现微信打飞机游戏
之前写了很多自定义View理论方面的文章,具体可以参见<Android中自定义View.ViewGroup理论基础详解> . 理论指导实践,本博文演示了如何通过自定义View实现微信打飞机 ...
- Android仿支付宝UI功能开发,Android 自定义view仿支付宝咻一咻功能
支付宝上有一个咻一咻的功能,就是点击图片后四周有水波纹的这种效果,今天也写一个类似的功能. 效果如下所示: 思路: 就是几个圆的半径不断在变大,这个可以使用动画缩放实现,还有透明动画 还有就是这是好几 ...
- android 高仿 探探卡片滑动,Android自定义View仿探探卡片滑动效果
Android自定义View仿探探卡片滑动这种效果网上有很多人已经讲解了实现思路,大多都用的是RecyclerView来实现的,但是我们今天来换一种实现思路,只用一个自定义的ViewGroup来搞定这 ...
- android wear支付宝6,Android自定义View仿支付宝输入六位密码功能
跟选择银行卡界面类似,也是用一个PopupWindow,不过输入密码界面是一个自定义view,当输入六位密码完成后用回调在Activity中获取到输入的密码并以Toast显示密码.效果图如下: 自定义 ...
- Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...
最新文章
- 用命令行非交互改密码
- WEB打印大全(转)
- python入门需要多久-怎么自学python,大概要多久?
- LeetCode Regular Expression Matching(.和*通配符匹配)
- HDU1257 最少拦截系统(下降自序列个数)
- 【机器学习】传统目标检测算法总结
- JDK 8中的Oracle Drops Collection文字
- 转:利用深度学习方法进行情感分析以及在海航舆情云平台的实践
- spring-boot+swagger实现WebApi文档
- laydate日期插件使用
- 深度学习(7) - 长短时记忆网络(LSTM)
- 20165223《网络对抗技术》Exp3 免杀原理与实践
- python 生成器原理_python生成器
- golang actor模型探索
- Selenium2.0功能测试之设置浏览器大小
- 5. http://kb.cnblogs.com/page/90838/
- Codeforces Round #442 (Div. 2) 877E - Danil and a Part-time Job dfs序+线段树
- spring 事务源码(三)如何保证被@Transactional标记方法中的所有sql都在一个事务内
- word 文档密码 html,Word文档密码解决打开方法
- 全国短消息服务中心号码
热门文章
- DataWhale-天池街景数字识别竞赛-task1-赛题理解
- 用QEMU模拟运行 WIndows 98 SE (2004.12.31更新)
- 得一微ys9082hc、ys9082hp怎么量产,ys9082hc量产工具,ys9082hp开卡软件,ys9082hc使用量产工具对固态硬盘进行ys9082hp开卡的指导教程
- vue 监听滚动事件之菜单滚动吸顶点击滑动到指定位置点击高亮
- 计算机乘法与加法速度差,认识乘法 练习课和100以内的加法和减法
- iOS 图片背景模糊效果
- 台式中端计算机配置单,2020中端游戏台式电脑组装配置单
- 【目标检测算法】R-CNN(详解)
- 三个细节鉴别女人的“质地”
- 做校长当如安县桑枣中学校长叶志平