自定义容器实现类似Windows屏保功能
菜鸟进场,方圆十里,寸草不生
写得很详细啦,本来是用RxJava来写的延时,不过考虑到有点门槛就放弃了
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.view.ViewGroup;
import android.widget.ImageView;import com.xhs.backupforcesmarthome.R;import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;/*** @author zx* @date 2018/3/29 17:09* description*/
public class BubbleBackgroundView extends ViewGroup {private Context context;private Bitmap bitmap;private ScheduledExecutorService scheduledThreadPool;private Thread myThread;private boolean flag = false;public BubbleBackgroundView(Context context, AttributeSet attrs) {super(context, attrs);this.context = context;//初始化泡泡bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bubble);//初始化线程池scheduledThreadPool = Executors.newScheduledThreadPool(1);//初始化线程myThread = new MyThread();}/*** 设置父控件宽高* @param widthMeasureSpec* @param heightMeasureSpec*/@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}/*** 设置子控件位置* @param b* @param i* @param i1* @param i2* @param i3*/@Overrideprotected void onLayout(boolean b, int i, int i1, int i2, int i3) {scheduledThreadPool.schedule(myThread, 2000, TimeUnit.MILLISECONDS);}/*** 线程回调到主线程*/private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 1) {if (getChildCount() >= 20) {removeView(getChildAt(0));}if (getChildCount() < 20) {ImageView imageView = new ImageView(context);imageView.setImageBitmap(bitmap);imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);addView(imageView);setChildLayout(imageView);}}}};/*** 子线程,在线程中进行泡泡生成与添加*/private class MyThread extends Thread{@Overridepublic void run() {super.run();handler.sendEmptyMessage(1);}}/*** 设置子控件的位置* @param imageView 子控件*/private void setChildLayout(ImageView imageView) {//随机距离左面的距离,控制从控件上面出来还是下面出来int left = new Random().nextInt(getWidth() - bitmap.getWidth()) + bitmap.getWidth();//随机距离顶部的距离,控制从左面和右面出来int top = new Random().nextInt(getHeight() - bitmap.getHeight()) + bitmap.getHeight();//随机四个方位int direction = new Random().nextInt(4);//随机泡泡x、y轴的运动时间long a = new Random().nextInt(8000) + 15000;long b1 = new Random().nextInt(8000) + 15000;//随机参数控制是往左飘还是往右飘int c = new Random().nextInt(2);//随机参数控制是往上飘还是往下飘int f = new Random().nextInt(2);int d = 1;int e = 1;if (c == 0) {d = -1;}if (f == 0) {e = -1;}//方位设置switch (direction) {case 0://从上面出来的泡泡imageView.layout(left, 0, left + bitmap.getWidth(), bitmap.getHeight());//控制在y轴上只能往下飘e = 1;break;case 1://从下面出来的泡泡imageView.layout(left, getHeight() - bitmap.getHeight(), left + bitmap.getWidth(), getHeight());//控制在y轴上只能往上飘e = -1;break;case 2://从左面出来的泡泡imageView.layout(0, top, bitmap.getWidth(), bitmap.getHeight() + top);//控制在x轴上只能往右飘d = 1;break;case 3://从右面出来的泡泡imageView.layout(getWidth() - bitmap.getWidth(), top, getWidth(), bitmap.getHeight() + top);//控制在x轴上只能往左飘d = -1;break;default:}//设置动画ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "translationX", 0, d * (getWidth() + bitmap.getWidth()));animator.setDuration(a);ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView, "translationY", 0, e * (getHeight() + bitmap.getHeight()));animator1.setDuration(b1);animator.start();animator1.start();}}
自定义容器实现类似Windows屏保功能相关推荐
- Android 给App加上屏保功能 类似广告功能的实现。
一朋友的所做的app中需要每个activity在用户30秒没有任何操作的时候,弹出一个屏保,屏保保持是屏幕长亮,屏保上面可以实现广告啊什么的等等.于是就写了个小demo,基本差不多都实现了,只需要改改 ...
- 西门子精彩屏+精简屏+精智屏设置屏保功能的具体方法和步骤
精彩屏+精简屏+精智屏设置屏保功能的具体方法和步骤 精彩Smart屏设置屏保: Smart屏支持屏保功能,但是不能自定义屏保,只能使用屏中自带的屏保,并且仅可置屏保等待时间.设置步骤如下: 1.从触摸 ...
- 关闭wps2019的屏保功能
有时在上传或下载比较大的文件的时候,往往会离开一会儿,但是wps2019会自动启动画报中心的屏保,影响下载.如何关闭屏保功能呢? 1.点击"更多"按钮: 2.点击"WPS ...
- WPF 制作 Windows 屏保
分享如何使用WPF 制作 Windows 屏保 WPF 制作 Windows 屏保 作者:驚鏵 原文链接:https://github.com/yanjinhuagood/ScreenSaver 框架 ...
- Android 11.0 Settings增加屏保功能(屏保时间必须小于休眠时间)
1.概述 在11.0的定制化产品的需求的需要 要求增加屏保功能,设置屏保前提必须是是需要设置休眠时间大于屏保时间,当屏保时间大于休眠时间时,休眠以后 屏保功能就无效,所以就必须设置好屏保时间 最终效果 ...
- android中屏保功能项目,【Android】一段时间不操作弹出【屏保】效果
仿屏保效果 最近项目的一个小Demo,和大家分享一下,本篇文章主要展示的是一个仿屏保的效果,用户在一段时间不操作会自动弹出屏保页面,当处于屏保页面的时候,[两秒内连续]按两次键盘[回车键]就会退出屏保 ...
- 【QT】QT Qtimer定时的使用 含屏保功能实现,鼠标无操作后处理事件
新建一个工程项目 我们的编程语言里面都有个定时器这样的类或者函数,定时器一般就是设定一个时间间隔,会自动发送一个信号,我们需要处理这个信号,也就是一个槽函数.因为QT是信号和槽的机制.定时操作有很多有 ...
- java做windows屏保_java编程加载窗口,制作动画(屏保泡泡)
1.整体的结构图: 2.编写GameFrame02.java代码: package cn.bjsxt.test; import java.awt.Frame; import java.awt.Grap ...
- linux6.5取消屏保,怎么把wps屏保关掉
1. 如何关掉最新wps屏保 1.打开WPS2019,点击左上角的WPS标签 2.点击应用中心的更多,打开应用中心窗口 3.在应用中心中,找到"WPS画报",点击进入 4.点击左侧 ...
- 将爱心代码设为电脑屏保,俘获少女芳心,还能假装黑客大佬,在酷炫的界面中保护隐私
将爱心代码设为电脑屏保,俘获少女芳心,还能假装黑客大佬,在酷炫的界面中保护隐私 本文介绍 Hacker Screen Saver 一款开源 Windows 屏保的使用.Hacker Screen Sa ...
最新文章
- VirtualCopy in WinCE6.0
- Python Module — grpcio gRPC 远程调用示例程序
- 每日一皮:完美的结对编程!
- PHP被忽视的编码规范
- git比较当前工作区和之前提交的内容差异
- 创建时间指定日期 java,Java避坑之如何创建指定时间Date对象
- php xml常用函数的集合及四种方法
- [LevelDB] 写批处理过程详解
- 链表根据主元切分成3段
- oa处理会签流程图_OA协同流程管理解决方案
- javaweb php异步处理,Spring-MVC异步请求之Servlet异步处理
- php环境缺失msv文件_电脑环境缺失运行库_电脑缺失运行库
- 永中集成Office与上访科技部有感
- 调用python-nmap实现扫描局域网存活主机
- Automation服务器不能创建对象--Excel.application
- 软考中级软件设计师基础整理(1.计算机组成与体系结构)
- GBase 8c 迁移工具 DMT 简述
- Super NES Programming/SNES Specs
- Python该怎样学?我如何快速掌握Python的?
- 滴水逆向三期和中级和高期教程
热门文章
- 杭州师范大学计算机科学与技术怎么样,杭州师范大学2020年本科专业录取分数大排名,计算机类专业最低...
- 360随身wifi2驱动 v5.3.0.1035 官方版
- UEFI原理与编程实践-PROTOCOL
- 7部史诗级自然纪录片,孩子14岁前要看完!
- html5 音乐播放器 静态,使用HTML5 Audio标签制作音乐播放器
- 位偏移 java_时区和偏移类 / Zone and Offset
- ERP软件与需求漫延,如何解决?
- c语言倒序输出英文字母表音标,28个英文字母表
- 秋季吃哪些食物可以改善心情?
- 小A与小姐姐给气球涂色[dp + 快速幂]