タブレット用プログラムの書き止め

android OS & iPadOS の記録。

【kotlin】回転検出で画像A↔B切り替え

2024-02-10 02:43:42 | Android studio 日記

デバイスの回転を検出して画像AとBを入れ替え成功。

縦長は一枚表示。
横長は左右並べて二枚表示。
回転を機にモードを切り替えられるかの実証である。


【MainViewModel.kt】
Int に変えました。

class MainViewModel: ViewModel() {
    val screenType: MutableLiveData<Int> by lazy {  // 1-portrait 2-landscape
        MutableLiveData<Int>()
    }
    override fun onCleared() {
        super.onCleared()
    }
}


【MainActivity.kt】
class MainActivity : AppCompatActivity() {
    private val viewModel:MainViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if (savedInstanceState==null) {
            viewModel.screenType.value = 0
            setImage()//初期画像セット
        }

        val dispTypeObserver = Observer<Int> { type ->
            if ( dispTypeObserver(type) ) return@Observer
        }
        viewModel.screenType.observe(this, dispTypeObserver )
    }

    @SuppressLint("SwitchIntDef")
    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)

        when (newConfig.orientation){ //回転を検出した時
            Configuration.ORIENTATION_PORTRAIT ->
                viewModel.screenType.value = 1
            Configuration.ORIENTATION_LANDSCAPE ->
                viewModel.screenType.value = 2
            else -> viewModel.screenType.value =0
        }
    }

    fun dispTypeObserver(type:Int): Boolean {
        val imageView = findViewById<MyImageView>(R.id.image_viewer)
        //省略 縦長と横長で画像を変える処理
        return false
    }

    fun setImage(){
        //省略。初期画像表示
    }
}

dispTypeObserver(type:Int)メソッドは、onCreate()内の行数の減少のための実証確認。

次は画像処理を考えるのか?
ファイル名の排出。ここで画像の縦横比で条件分け。
条件により回転ロックも有り。
1枚、2枚の画像生成。bitmap排出。
Observerにbitmapを渡し描画。

タッチイベントも考えるのか。