- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发一个应用程序,并且刚刚构建了它的逻辑部分。现在我想像著名的计时器应用程序一样设计这个应用程序。例如:
我想要的是外圈,它填充了某个事件的每个触发器或数字的增量。我实际上不知道它是动画部分(比如内置在 flash 中还是什么)或者只是可能通过使用其内置属性和功能在 android 本身中编码。所以任何人如果告诉我使用什么工具或任何可以从底部解释事情的引用教程。我真的不知道设计的任何东西。这个有代码吗??
最佳答案
这样行吗?
更新:现在也能正确处理现实世界时间。
示例屏幕截图:
代码:
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextPaint;
import android.view.View;
import android.graphics.*;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new CircularCountdown(this));
}
private static class CircularCountdown extends View {
private final Paint backgroundPaint;
private final Paint progressPaint;
private final Paint textPaint;
private long startTime;
private long currentTime;
private long maxTime;
private long progressMillisecond;
private double progress;
private RectF circleBounds;
private float radius;
private float handleRadius;
private float textHeight;
private float textOffset;
private final Handler viewHandler;
private final Runnable updateView;
public CircularCountdown(Context context) {
super(context);
// used to fit the circle into
circleBounds = new RectF();
// size of circle and handle
radius = 200;
handleRadius = 10;
// limit the counter to go up to maxTime ms
maxTime = 5000;
// start and current time
startTime = System.currentTimeMillis();
currentTime = startTime;
// the style of the background
backgroundPaint = new Paint();
backgroundPaint.setStyle(Paint.Style.STROKE);
backgroundPaint.setAntiAlias(true);
backgroundPaint.setStrokeWidth(10);
backgroundPaint.setStrokeCap(Paint.Cap.SQUARE);
backgroundPaint.setColor(Color.parseColor("#4D4D4D")); // dark gray
// the style of the 'progress'
progressPaint = new Paint();
progressPaint.setStyle(Paint.Style.STROKE);
progressPaint.setAntiAlias(true);
progressPaint.setStrokeWidth(10);
progressPaint.setStrokeCap(Paint.Cap.SQUARE);
progressPaint.setColor(Color.parseColor("#00A9FF")); // light blue
// the style for the text in the middle
textPaint = new TextPaint();
textPaint.setTextSize(radius / 2);
textPaint.setColor(Color.BLACK);
textPaint.setTextAlign(Paint.Align.CENTER);
// text attributes
textHeight = textPaint.descent() - textPaint.ascent();
textOffset = (textHeight / 2) - textPaint.descent();
// This will ensure the animation will run periodically
viewHandler = new Handler();
updateView = new Runnable(){
@Override
public void run(){
// update current time
currentTime = System.currentTimeMillis();
// get elapsed time in milliseconds and clamp between <0, maxTime>
progressMillisecond = (currentTime - startTime) % maxTime;
// get current progress on a range <0, 1>
progress = (double) progressMillisecond / maxTime;
CircularCountdown.this.invalidate();
viewHandler.postDelayed(updateView, 1000/60);
}
};
viewHandler.post(updateView);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// get the center of the view
float centerWidth = canvas.getWidth() / 2;
float centerHeight = canvas.getHeight() / 2;
// set bound of our circle in the middle of the view
circleBounds.set(centerWidth - radius,
centerHeight - radius,
centerWidth + radius,
centerHeight + radius);
// draw background circle
canvas.drawCircle(centerWidth, centerHeight, radius, backgroundPaint);
// we want to start at -90°, 0° is pointing to the right
canvas.drawArc(circleBounds, -90, (float)(progress*360), false, progressPaint);
// display text inside the circle
canvas.drawText((double)(progressMillisecond/100)/10 + "s",
centerWidth,
centerHeight + textOffset,
textPaint);
// draw handle or the circle
canvas.drawCircle((float)(centerWidth + (Math.sin(progress * 2 * Math.PI) * radius)),
(float)(centerHeight - (Math.cos(progress * 2 * Math.PI) * radius)),
handleRadius,
progressPaint);
}
}
}
关于android - 我如何编写一个旋转的圆形动画,比如这个(附图)?安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14529010/
在下图中,如何将多选项选择器和水平滚动条放在同一个白色圆角矩形中?它看起来非常适合排序,我很想实现类似的东西。 最佳答案 您需要有一个包含两个部分的 UITableView(一个名为“section
我正在尝试瞄准带有白点的方框。此图片中的每个黑框都是一篇博文,包括顶部的较大黑框。最初,我想使用 nth-child 但老实说我不确定如何安排它或使用什么数字。我确定 jQuery 是一个选项。如果有
我正在使用 Next.js 和 SCSS 并尝试使用响应式网格系统在页面中心定位 5 行和 3 行图像。 我只需要稍微将图像位置调整到右侧,但内容根本不会移动。 代码如下: Next.js // So
更准确地说,我创建了一个描述我的查询的图形: 基本上,我有一个圆形标志。当用户将鼠标悬停在它上面时,我希望弹出一个人脸的图像,或者更确切地说是通过一些动画向上移动。这是我可以用 css3 完成的事情吗
左侧“结果”部分是当前发生的情况。右边的部分是我希望结果发生什么。当结果组对于容器来说似乎很大时,容器底部的结果会隐藏起来。我一直在网上搜索 CSS 修复,非常感谢任何帮助。 谢谢。 最佳答案 您可以
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improv
我想创建一个看起来或多或少像这样的networkx图表,但我一直无法找到一种方法让它以我需要的方式显示。大节点和边缘显示良好,但我一直无法找到如何添加小节点。 最佳答案 networkx.draw()
我遇到了以下伪代码。这里 A 是一个整数数组: for i = 1 to n { j = i; f = 1; while ((j>1) and (f==1)) {
我在某些应用程序周围看到过这些对话框,但我一直无法弄清楚如何显示/创建它们。我错过了一些明显的东西吗?感谢您的帮助! 最佳答案 您可以创建PopupMenu。 首先在res/menu文件夹中创建pop
我目前正在尝试解决在浏览器和通过 gmail 中呈现良好的 html 电子邮件的一些问题,但不幸的是,我在 outlook 中遇到垂直对齐文本的问题(它粘在底部)。 这张图片告诉你出了什么问题: TH
Highcharts 专家!我想制作以下图表(使用 Highcharts 框架),但不知道从哪里开始。我是否需要将多个图表叠加到一个图表中?我将如何创建具有如所附示例中的图片所示范围的框?有人有任何例
希望有人能给我指出正确的方向,也许是关于如何创建这些弹出下拉列表的教程,例如喜欢此链接的 Facebook。我假设它是 jquery? alt text http://2pence.com/pop.j
当 Android Studio 在 Yellow 中向我提示照片如何,接受的快捷方式是什么,这张图片查看全部: 最佳答案 根据您的图片,android studio 以黄色显示指定方法可以接受的值类
我想使用 Python 和 cv2 来比较 2 个图像,如下所示。 (Python 2.7 + Windows) c:\Original.jpg c:\Edited.jpg 非常简单,我可以在下面做并
症状:我正在使用从创建者的 git 存储库中提取的项目。我包含了它们的库,如 libs 文件夹中所示。项目没有错误,项目编译。然而,当它访问一个应该在 jar 中的对象时,它崩溃了。 我已经完成了我在
我已阅读 this和 this , 观看 this ... 我已经制作了一个图表来说明我是如何理解它的: Javascript 回调(函数)可以存在于 current queue、check queu
我正在开发一个应用程序,并且刚刚构建了它的逻辑部分。现在我想像著名的计时器应用程序一样设计这个应用程序。例如: 我想要的是外圈,它填充了某个事件的每个触发器或数字的增量。我实际上不知道它是动画部分(比
要像这样为 UIView 支持纵向和横向: +-------------------+ | +---------------+ | | | | | | |
我知道这个问题非常简短,但我如何才能在 Android Studio 项目中用 XML 创建这个形状? 似乎我可以创建一个矩形,然后从中删除一个半圆部分,但在 XML 中实现该效果似乎非常困难。以前有
我正在创建一个电子商务网站。在显示折扣盒时,商品的图像向左移动(下图)。我想要商品类别顶部的折扣框(蓝色)。谁能帮我解决这个问题? CSS 文件 div.item { margin-top:0
我是一名优秀的程序员,十分优秀!