C#のフォームで、特定のフォルダ内にある動画を連続再生したい
とりあえず、Windows Media Playerを使うことにしまして。
手順!
1.ツールボックスにWindows Media Playerのコンポーネントを追加
こちらを参考にしました
2.追加したコンポーネントをツールボックスからフォームにドラッグして追加
Timerも追加する(ドラッグしてフォームの上に落とすと、フォーム外の下に表示されるので、そうなればOK)
3.あとはコード書く
こちらを参考にしました
変えたのは以下の点。
・this.Bounds = new Rectangle(0,0,1920,1080);
の部分は削除(DockでFillにしてるからいいかなーと)
あとフォームは最大化してます。
・動画のフォルダはトップフォルダしか見ない(サブフォルダは見ない)
System.IO.SearchOption.AllDirectories→TopDirectoryOnly
一時的に要らないファイルを退避しておくのに、よくサブフォルダつくって放り込んでおくので……
・ファイルが終了しても頭のファイルに戻る仕様になっていますが、わたしは最後のファイルを再生したらフォームを閉じるように修正しました
おわり。
AWSの無料期間が切れたぞ
無料期間、5月末までだったわぁ~~~(何度かメールでお知らせ来るので、ただのわわたしの横着)
と慌ててAWSの中身を削除するなど。
お勉強でハンズオン動かしてたくらいの使い方なので、料金は発生しないはずですが、ビビりなので……
オブジェクトの削除に依存関係などあるんだろうか……とドキドキしながら削除していきましたが、S3のオブジェクトがないので削除できないよーってAppSyncだったかAmplifyだかに言われましたが、とりあえず放置してたら消えてました。めでたしめでたし。
削除してもすぐに消えないものもあるので、ドキドキしちゃいますよね。
IAMのロールで消えないのあったけど放置。ポリシーもたくさんあるので放置。ポリシーは料金発生しないようなので。
料金発生しているかどうかは、請求およびコスト管理コンソールを確認すればいいようだ。
以下を参考にしました。
なおルートアカウントは削除してません。なんとなく。
KotlinでRecyclerViewをスクロールさせたときにtoolbarが隠れるようにしておくと、Fragment遷移後でも消えたままになるので、強制表示させる
まぁ、スクロールしても隠れないようにしておいてもいいんだけれど、スクロールするくらい量があるんだから、ツールバーかくしてデータの表示領域広くしてあげたほうがよいかなって思いまして。
なお参考にしたのはこちらの記事。
以下、手順。
1.Basic Activityテンプレートで新プロジェクト作成
※ビルドでエラーが出たらこちら参照
2.Floating Buttonは要らないので関係個所削除
わかんなければ先に進んで、赤線出た箇所を削除
3.こちらの記事を参考に、FirstFragmentにRecyclerView追加
ただし、MainActivity.ktはFirstFragment.ktに読み替え。(#OnCreateも#OnViewCreatedに読み替え。)
activity_main.xmlも、fragment_first.xmlに読み替え。
4.RecyclerViewの中身を追加(FirstFragment.kt)
画像は適当にします(res > drawble > 右クリック> New > Vector Asset で適当なのを追加して、全部それにするとか)
スクロールが必要なほどの行数が欲しいので、美しくないけどささっとこんな感じにした
mAnimalList = arrayListOf(dog, cat, elephant, horse, lion)
↓
mAnimalList = arrayListOf(dog, cat, elephant, horse, lion, dog, cat, elephant, horse, lion)
5.スクロールでtoolbarが隠れるようにする(activity_main.xml)
赤字部分を追加
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/Theme.MyApplication.PopupOverlay" />
6.行クリックでSecondFragmentに遷移するようにする
CustomAdapter.ktに以下を追加
private inner class ItemClickListener : View.OnClickListener {
override fun onClick(view: View) {
Navigation.findNavController(view)
.navigate(R.id.action_FirstFragment_to_SecondFragment)
}
}
#onCreateViewHolderに赤字部分追加
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(viewGroup.context).inflate(R.layout.list_item, viewGroup, false)
view.setOnClickListener(ItemClickListener())
return ViewHolder(view)
}
7.FirstFragmentでtoolbarが消えるまでスクロールし、行クリックで画面遷移すると、toolbarが消えたままであることを確認
8.AppBarLayoutにid追加(activity_main.xml)
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/appBar"
android:theme="@style/Theme.MyApplication.AppBarOverlay">
9.MainActivity.kt#onCreateに以下を追加
val navController = findNavController(R.id.nav_host_fragment)
navController.addOnDestinationChangedListener { _, destination, _ ->
findViewById<AppBarLayout>(R.id.appBar)?.apply {
setExpanded(true, false)
}
}
10.FirstFragmentでtoolbarが消えるまでスクロールし、行クリックで画面遷移すると、toolbarが強制的に表示されることを確認
9をすると、Navigationを使ったすべての遷移についてそうなるけど、Fragment個別にしたい場合は
navController.addOnDestinationChangedListener { _, destination, _ ->
when (destination.id)
{
R.id.SecondFragment ->
findViewById<AppBarLayout>(R.id.appBar)?.apply {
setExpanded(true, false)
}
}
}
とするか
そのFragmentのonViewCreatedで
(activity as AppCompatActivity).findViewById<AppBarLayout>(R.id.appBar)?.apply {
setExpanded(true, false)
}
とする。
なお、Fragment使ってるバージョンでお届けしましたが、Fragment使ってないぜ!って場合は、何かしらのactivity#onCreateで
val appBarLayout : AppBarLayout = findViewById(R.id.appBar)
appBarLayout.setExpanded(true, false)
こうかな……
Android StudioのAVDをDドライブに移行
Cドライブ整理の続き。
Android StudioのAVDを移す。これもユーザーフォルダにあるんだなぁ。
1.DドライブにAVDを保存するフォルダ作成
2.システム環境変数でそのフォルダを設定
3.新しいフォルダにAVDファイルを移動
4.移動後、設定ファイル内のパスを変更
5.Android Studio起動確認
できた。終わり。
Cドライブ1/3くらい空いた。
なお、容量を食っているフォルダを簡単に確認する方法
Androidの.gradleも食ってるけど、3.5GBか……まぁいいか。
やらなかったけど、Android Studio周りのファイルの移動についてはこちら。AVDのことも書いてる。
ThunderbirdのメールデータをDドライブに移行
何にも考えないで全部Cドライブにバカスカ入れていたら、Cドライブがいっぱいいっぱいになっており……
そしてガラガラのDドライブ……なんてこと
受信メールが多いので、動きが緩慢になり始めているメールから着手。
こちらを参考にしました~
Thunderbirdのメールデータってデフォルトだとユーザーフォルダにあるんだな……
上記記事には書いていないので補足ですが、メールがバカスカ届くタイプの方は、作業前にメールの自動受信を止めておくのが吉。
アカウント設定 > サーバ設定
「新着メッセージがないか起動時に確認する」
「新着メッセージがないか○分ごとに確認する」
のチェックを外しておく。
なお、移動したのは「Profiles」フォルダの中にあったデータだけで、「profiles.ini」という設定ファイルは、そのままの場所においてあります。
次は、Android StudioのAVDを移す。sakimika.hateblo.jp
アプリからメールが飛ばなくなった「SMTP ホストが見つかりません。」
あるPCに仕掛けているアプリから出しているメールが飛ばなくなった。
ログを確認すると、ある時から急に飛ばなくなっている。
エラー内容は
「SMTP ホストが見つかりません。」
ping 打ってみると、IPアドレスが返ってこない……はて?
なお同じアプリをほかのPCにも入れているが、そちらは正常稼働。設定ファイルも問題ない。
さてわたしの知識ではここで限界であるので、ネットワークエンジニアさんにお伺いすると、そのPCのルーター2つのうち、1つ(ルーターA)が落ちているのではないかと。
デフォルトゲートウェイは稼働している方(ルーターB)に切り替わっている(そういうアプリを入れている)ので、ネット接続は可能となっているが、PCの設定でDNSサーバーをルーターAにしか設定していなかったので、DNSが引けなくなっていた、と。
なるほど。
PCは遠隔地にあるためすぐにルーターの確認ができないため、対応として、DNSサーバーの設定のセカンダリーに、ルーターBを入れてもらった。
あとは現地に行くときに機器は確認してもらうとして、今後は、PCの設定をするときに、DNSサーバーのプライマリーだけじゃなくて、セカンダリーも設定しましょう、というお話。