android - 将视图添加到具有时间延迟的活动?
问题描述
我正在尝试修改现有的示例应用程序,当用户触摸屏幕时,该应用程序会将视图添加到主活动。这些视图是围绕屏幕浮动的位图图像。触摸屏幕上的任意位置会在该位置添加这些图像之一。
它通过为每次触摸创建一个新视图(位图图像)来实现这一点。
它按原样工作正常,但我正在尝试添加一个功能,它以编程方式添加这些视图而无需任何用户输入。
在下面的代码中,我添加了 onResume() 来尝试这个功能。(在 onCreate() 中添加相同的代码也不起作用。)
不幸的是,它并没有像我希望的那样添加它们——不是在用户启动应用程序后每 500 毫秒添加一个,而是暂停 5 秒,然后一次添加所有十个。
显然我是 android dev 的新手,所以我不知道从哪里开始。
我需要做些什么来实现延迟,使其每半秒添加一个新视图?为什么默认情况下会这样做?
谢谢!
class ImageScreen : Activity(){
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.imagescreen)
mFrame = findViewById<View>(R.id.frame) as FrameLayout
mBitmap = BitmapFactory.decodeResource(resources, R.drawable.myBitmapImage)
mFrame!!.setOnTouchListener { _, event ->
createImage(event.x, event.y)
true
}
}
override fun onResume() {
super.onResume()
for (i in 0..10) {
createImage(xpos.random(), ypos.random())
sleep(500)
}
}
private fun createImage(x: Float, y: Float){
mFrame!!.addView(myImage(applicationContext, x, y))
}
inner class myImage internal constructor(context: Context, x: Float, y: Float) : View(context) {
private fun createScaledBitmap(r: Random) {
mScaledBitmap = Bitmap.createScaledBitmap(mBitmap!!, mScaledBitmapWidth, mScaledBitmapWidth, false)
}
fun start() {
val executor = Executors.newScheduledThreadPool(1)
mMoverFuture = executor.scheduleWithFixedDelay({
if (changePosIfStillOnScreen()) {
postInvalidate()
} else stop(false)
}, 0, REFRESH_RATE.toLong(), TimeUnit.MILLISECONDS)
}
private fun stop() {
mFrame!!.removeView(this@myImage)
}
@Synchronized
override fun onDraw(canvas: Canvas) {
canvas.save()
canvas.drawBitmap(mScaledBitmap!!, mXPos, mYPos, mPainter)
canvas.restore()
}
}
}
// Additional code, such as functions and variable declarations that are not pertinent to this question, have been removed for simplicity
解决方案
因为它会暂停 5 秒,然后一次添加所有十个,那是因为sleep(500)
您在代码中使用,它会冻结主线程(UI 线程)。
使用 handler 实现延迟动作,参考: https ://developer.android.com/reference/android/os/Handler
推荐阅读
- laravel - Laravel 三重关系
- ruby - 替代 if-then-else 或 case 语句
- cmd - 使用 gsutil 复制文件后,它们不会立即从本地存储中删除
- paypal - What is the difference between Paypal "preapproved payments" and "automatic payments"?
- c# - CheckSchemeName 在具有多个前缀的 url 上失败
- sql - SQL 使用 Floor 向下舍入
- python - PyQT 无法从单独的类访问 GUI 信息?
- java - 多线程系统中的 Logback 和 MDC
- java - JIRA 启动期间加载失败。java.lang.NoClassDefFoundError: javax/management/InstanceNotFoundException
- android - Angular 混合应用程序中未触发 deviceready 事件