如何使用 OnLongClickListener 更改 ImageView 图像并使用 Kotlin 保存状态
How to change ImageView images using OnLongClickListener and Save State using Kotlin
我是 Android 开发的新手。我正在用科特林做这件事。
我得到了一个使用 OnLongClickListener 更改 imageView 图像的任务,例如每次长按更改两到三个图像。另外,我想在旋转屏幕后保存图像的状态。我将其设置为一次将一张图片更改为另一张图片,但仍然不知道如何正确地进行操作。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lightMe.setOnLongClickListener {
lightMe.run {
lightMe.setImageDrawable(getDrawable(R.drawable.ic_baseline_flare_24))
lightMe.setImageDrawable(getDrawable(R.drawable.ic_baseline_wb_incandescent_24))
true
}
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
}
检查这个例子。我已经添加了一个 ImageView
,我正在长按更改图像。
MainActivity.kt:
import android.os.Bundle
import android.util.Log
import androidx.annotation.DrawableRes
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
companion object {
const val IMAGE_ID_KEY = "IMAGE_ID_KEY" //key to save imageId
}
@DrawableRes
private var imageId = R.drawable.ic_launcher_foreground //field which keeps actual drawable id
set(value) {
field = value
image.setImageResource(value) //every time value is changed, ImageView is updated
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("MY_TAG", "onCreate")
image.setOnLongClickListener {
Log.d("MY_TAG", "longClick")
// change image to the opposite
imageId =
if (imageId == R.drawable.ic_launcher_background) R.drawable.ic_launcher_foreground else R.drawable.ic_launcher_background
true
}
}
// saving imageId before app can be destroyed. E.g. rotation
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
Log.d("MY_TAG", "onSaveInstanceState")
outState.putInt(IMAGE_ID_KEY, imageId)
}
// restoring imageId every time app is recreating
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
Log.d("MY_TAG", "onRestoreInstanceState")
imageId = savedInstanceState.getInt(IMAGE_ID_KEY)
}
}
main_activity.xml(只是一张图片):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:src="@drawable/ic_launcher_foreground"
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
我是 Android 开发的新手。我正在用科特林做这件事。 我得到了一个使用 OnLongClickListener 更改 imageView 图像的任务,例如每次长按更改两到三个图像。另外,我想在旋转屏幕后保存图像的状态。我将其设置为一次将一张图片更改为另一张图片,但仍然不知道如何正确地进行操作。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lightMe.setOnLongClickListener {
lightMe.run {
lightMe.setImageDrawable(getDrawable(R.drawable.ic_baseline_flare_24))
lightMe.setImageDrawable(getDrawable(R.drawable.ic_baseline_wb_incandescent_24))
true
}
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
}
检查这个例子。我已经添加了一个 ImageView
,我正在长按更改图像。
MainActivity.kt:
import android.os.Bundle
import android.util.Log
import androidx.annotation.DrawableRes
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
companion object {
const val IMAGE_ID_KEY = "IMAGE_ID_KEY" //key to save imageId
}
@DrawableRes
private var imageId = R.drawable.ic_launcher_foreground //field which keeps actual drawable id
set(value) {
field = value
image.setImageResource(value) //every time value is changed, ImageView is updated
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("MY_TAG", "onCreate")
image.setOnLongClickListener {
Log.d("MY_TAG", "longClick")
// change image to the opposite
imageId =
if (imageId == R.drawable.ic_launcher_background) R.drawable.ic_launcher_foreground else R.drawable.ic_launcher_background
true
}
}
// saving imageId before app can be destroyed. E.g. rotation
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
Log.d("MY_TAG", "onSaveInstanceState")
outState.putInt(IMAGE_ID_KEY, imageId)
}
// restoring imageId every time app is recreating
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
Log.d("MY_TAG", "onRestoreInstanceState")
imageId = savedInstanceState.getInt(IMAGE_ID_KEY)
}
}
main_activity.xml(只是一张图片):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:src="@drawable/ic_launcher_foreground"
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>