2018年5月29日のブックマーク (51件)

  • [iPhone] UIScrollView 横スクロール (Objective-C)

    画像をAssets.xcassetsに追加 例としてヨガのポーズ画像を使いますがその画像ファイル、yoga_0@2x.jpg から yoga_3@2x.jpg までをAssets.xcassetsにコピペします。@2xを名前に入れてあるので2xとして設定されています。 UIScrollViewの設定 Storyboard を開き背景色を適当に決めます。Scroll View を選択してSafeAreaあたりに設置します。 ここでScroll View の Paging Enabled にチェックを入れることにより、ページスクロールが可能となります。 #import "ViewController.h" @implementation ViewController{ // UIScrollView のインスタンス IBOutlet UIScrollView *scrollView; } //

    [iPhone] UIScrollView 横スクロール (Objective-C)
    nomadik
    nomadik 2018/05/29
    ページスクロール
  • [Android] クラス メソッド の設定と呼び出し

    AndroidJava言語で開発します(Kotlinでもできます)。Javaではクラスを定義して呼び出せます。 Activity:A, Activity:B に共通するメソッドを別クラスで設定すると便利です。これはActivity 画面遷移とデータの受け渡しとは異なります。 例として簡単なテストアプリを作ってみます。ボタンを押したらテキストが表示され、テキストは別クラスから呼び出します。 クラスの定義 SubClassというクラスを作り、名前を呼び出すメソッドname() を作成します。 「File」「New」「Java Class」を選択します。 Kotlinの場合は「Kotlin File/Class」になりますが ファイル名を入力 MainActivityと同じ個所に作成されました。 name() はフィールドの文字の配列から指定された要素を返すようにします。setter, ge

    [Android] クラス メソッド の設定と呼び出し
    nomadik
    nomadik 2018/05/29
    メソッド
  • [Android] aabからapkを取り出しをインストールする

    最近では公開には aab ファイルを使いますが、中には apk が内包されています そのapkを bundletool を使って取り出してみましょう aabとapk aabは公開のみを目的としており、Android デバイスにインストールすることはできません apkは端末にインストール可能かつ実行可能なアプリ形式です aabをデバイスにインストールするためにはbundletool を使ってapkを取り出す必要があります

    [Android] aabからapkを取り出しをインストールする
    nomadik
    nomadik 2018/05/29
    apk をインストール
  • [Android] ArrayList の使い方

    ArrayList<型> 変数名 = new ArrayList<型>( );<型>: Generics機能、にどのような型のクラスを格納するのかを指定します。 StringはStringクラスですが、intやfloatはクラスではないので基型 Integer、Floatのラッパーを使います。

    [Android] ArrayList の使い方
    nomadik
    nomadik 2018/05/29
    ArrayList
  • [Android] 背景が半透明の Activity を作る

    のように黒の半透明を設定しても灰色の背景色になるだけです。 これを半透明にするには、半透明のThemeを作って紐づけすることで可能です。 (Android Studio のファイル構成が変わって res\values\ 以下にあった styles.xml がなくなり代わりに Theme.xml になりました。) 新しく Them.TranslucentBackground のようなTheme名を作り、以下のようにstyleを追加し item として透明背景の @android:color/transparent を設定します。 Theme.xml <resources xmlns:tools="http://schemas.android.com/tools"> <style name="Theme.TranslucentBackground" parent="Theme.Material

    [Android] 背景が半透明の Activity を作る
    nomadik
    nomadik 2018/05/29
  • [Android] Logcatを端末に保存するためProcessBuilderを使う

    //package your.package.name; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.widget.Button; import androidx.appcompat.app.AppCompatActivity; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.

    [Android] Logcatを端末に保存するためProcessBuilderを使う
    nomadik
    nomadik 2018/05/29
    ProcessBuilder
  • [Android] Android アプリからScreenShotを撮る

    package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.PixelFormat; import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.media.Image; import android.media.ImageReader; import android.media.projection.MediaPro

    [Android] Android アプリからScreenShotを撮る
    nomadik
    nomadik 2018/05/29
    スクショ
  • [Android] Android Studio での encoding 設定

    EncodingはAndroid Studio 3.x ではデフォルトで問題になる事はありませんが、1.xでは時々このようなことがありました。設定内容はほぼ同じなので同様のエラー、ワーニングの時のためにしばらく残しておきます。 Android Studio の Gradle は「UTF-8」でコンパイルするので ソースが <System Default>の windows-31j だと文字化けが出てしまいます それでも、まあとりあえず Build は成功しているのですが なにか気持ち悪いし、日語を表示させるときに文字化けが生じます 基的にはjavaコード内には日語を使わないようにしておいたほうがいいと思います。 日語をアプリで表示させる時の正しい方法は res¥vlaues¥strings.xmlを使って置き換えを行うことです。(お行儀の良いやり方) UTF-8 encoding

    [Android] Android Studio での encoding 設定
    nomadik
    nomadik 2018/05/29
  • [Android & Kotlin] Activityの遷移をさせる

    Kotlinを使ってJavaと同じようにActivity間を遷移させる方法です。また同じActivity内で画面を変える方法もあります。 Activityから別のActivityへの遷移ですが、結果的にActivityの画面遷移となります。ただ最近は画面の遷移だけであればFragmentを使うのが主流です。 Activityを画面の変更だけに使うにはコスト高です。Activityは画面管理以外にも色々とやることがあるからです。画面表示をActivityを変えずにFragmentで複数張り付けることが可能です。 以下Javaによる遷移をKotlinに置き換えています。 https://akira-watson.com/android/activity-1.html Intent()によるActivityの画面遷移 「Activityを変えて画面遷移」をしたい場合には、Intent を使います

    [Android & Kotlin] Activityの遷移をさせる
    nomadik
    nomadik 2018/05/29
    Activityの遷移
  • [Android] frame-by-frame Animation でパラパラアニメーション

    ImageView imgView ... // ImageViewの backgroundにanimation listを設定 imgView.setBackgroundResource(R.drawable.animation_list); AnimationDrawable animation = (AnimationDrawable)imgView.getBackground(); animation.start(); ... animation.stop();

    [Android] frame-by-frame Animation でパラパラアニメーション
    nomadik
    nomadik 2018/05/29
    パラパラ動画
  • [Android] AnimatorListenerAdapter によるAnimationの一時停止と再開

    AnimatorPauseListener AnimatorListener を実装してリスナーをObjectに設定すると、開始、キャンセル、終了、リピートがコールバックされますが、一時停止とその後の再開はAnimatorPauseListenerを使わないとできません。 設定はAnimatorListenerとほとんど同様ですが、pauseとresumeにはその時の状態を確認してpause()とresume()を実行させます。 public class MainActivity extends AppCompatActivity implements Animator.AnimatorPauseListener{ ObjectAnimator objectAnimator; @Override protected void onCreate(Bundle savedInstanceSta

    [Android] AnimatorListenerAdapter によるAnimationの一時停止と再開
    nomadik
    nomadik 2018/05/29
    Animator Listener
  • [Android] Property Animation 画像が回転して落ちていく

    Animationを実現させるためには他にも方法がありますが、Property Animationは画像だけでなくObjectも扱えること。その対象物の位置の具体的な座標など(property)を毎回変更しながら動かすというところです。View  AnimationではAnimationを見せているだけでそのもののpropertyは変わっていません。 Animator クラス Animator Property Animationのためのスーパークラス ValueAnimator Animatorを継承したクラスでanimationの中間データを計算 ObjectAnimator ValueAnimatorを継承したクラスで対象Objectに値を設定する AnimatorSet Animatorを継承したクラスで、幾つかのAnimatorをグループ化できる Objectの移動には tran

    [Android] Property Animation 画像が回転して落ちていく
    nomadik
    nomadik 2018/05/29
    Animation 画像回転
  • [Android] AnimationSet アニメーションの組み合わせ

    XML attributes res以下にanimというフォルダーを作成してxmlファイルを置きます。 animationの属性設定は<set />タグを使って以下のように設定します。今回はscaleとrotateを組み合わせてみます。 res\anim\animation_set.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="1.0" android:toXScale="0.0" android:fromYScale="1.0" android:t

    [Android] AnimationSet アニメーションの組み合わせ
    nomadik
    nomadik 2018/05/29
  • [Android] TranslateAnimation 移動アニメーション

    Viewにアニメーションを施したいときはこのAnimationが簡単です。ただし途中で止めるなど込み入ったことはできません。Property Animation 等を使いましょう。 設定方法は2通りあります。 XML attributes res以下にanimというフォルダーを作成してxmlファイルを置きます。 animationの属性設定は<translate />タグを使って以下のように設定します。 fromXDelta:開始時のx位置 toXDelta:終了時のx位置 fromYDelta:開始時のy位置 toYDelta:終了時のy位置 fillAfter:アニメーション終了時にそのままにする(true) duration:アニメーション期間[msec] 移動アニメーションの開始位置と終了位置設定は3通りあります。 Animation.ABSOLUTE:240 のようなpixel絶

    [Android] TranslateAnimation 移動アニメーション
    nomadik
    nomadik 2018/05/29
    Translate Animation
  • [Android] ScaleAnimation 拡大・縮小アニメーション

    Viewにアニメーションを施したいときはこのAnimationが簡単です。ただし途中で止めるなど込み入ったことはできません。Property Animation 等を使いましょう。 設定方法は2通りあります。 XML attributes res以下にanimというフォルダーを作成してxmlファイルを置きます。 animationの属性設定は<scale />タグを使って以下のように設定します。 fromXScale:開始時のxスケールサイズ(1.0で表示画像のまま) toXScale:終了時のxスケールサイズ fromYScale:開始時のyスケールサイズ(1.0で表示画像のまま) toYScale:終了時のyスケールサイズ pivotX:スケール時のx座標(50%がview中央値) pivotY:スケール時のy座標(50%がview中央値) fillAfter:アニメーション終了時にそ

    [Android] ScaleAnimation 拡大・縮小アニメーション
    nomadik
    nomadik 2018/05/29
    Animation
  • [Android] RotateAnimation 回転アニメーション

    Viewにアニメーションを施したいときはこのAnimationが簡単です。ただし途中で止めるなど込み入ったことはできないので、その場合は Property Animation 等を使いましょう。 設定方法は2通りあります。 XML attributes animationの属性設定は<rotate />タグを使って以下のように設定します。 interpolator:補間処理を行う repeatCounter:繰り返し回数 fromDegrees:回転の開始角度[°] toDegrees:回転の終了角度[°] pivotX:回転軸のx座標 pivotY:回転軸のy座標 fillAfter:アニメーション終了時にviewをそのまま残す(true) duration:アニメーションの期間[msec] animフォルダーを作成してxmlファイルをres¥anim¥以下に配置します。 rotatio

    [Android] RotateAnimation 回転アニメーション
    nomadik
    nomadik 2018/05/29
    RotateAnimation
  • [Android] AlphaAnimation フェードイン・フェードアウト

    alpha値を 1.0 -> 0.0 へアニメーションで変更させるのがAlphaAnimationですが、 画像1枚を使ってfade out/in を実現できるのでとても便利な機能です。 設定方法は2通りあります。 XML attributes res以下にanimというフォルダーを作成してxmlファイルを置きます。 今回はfedeinとfadeoutの2種類作りました。 animationの属性設定は<alpha />タグを使って以下のように設定します。 interpolator:補間処理を行う fromAlpha:アニメーション開始時のalpha値 toAlpha:アニメーション終了時のalpha値 fillAfter:アニメーション終了時にviewをそのまま残す(true) duration:アニメーションの期間[msec] res\anim\alpha_fadeout.xml <?

    [Android] AlphaAnimation フェードイン・フェードアウト
    nomadik
    nomadik 2018/05/29
    フェードイン・フェードアウト
  • [Android] MediaStore スマホの画像や音楽ファイルを検索する

    ContentProvider ContentProviderは外部アプリに対しテーブルに似たものとしてデータを提供するものです。 Ref: コンテンツ プロバイダの基 コンテンツ プロバイダ コンテンツ プロバイダにアクセスする一般的なパターンは、以下のようになります。 CursorLoader を使用してバックグラウンドで非同期クエリを実行 UI の Activity/Fragment は、クエリに対して CursorLoader を呼び出し ContentResolver を使用して ContentProvider からデータを取得 Ref: コンテンツ プロバイダの基 ContentResolver.query() を呼び出してデータ情報を取得。 ContentResolver contentResolver = getContentResolver(); Cursor cur

    [Android] MediaStore スマホの画像や音楽ファイルを検索する
    nomadik
    nomadik 2018/05/29
    Intent.ACTION_OPEN_DOCUMENT
  • [Android] inflate を使ってみる

    BaseAdapterやちょっと複雑なレイアウトしようとすると登場する inflater とは何者なのか? Inflater inflate メソッドは、XMLレイアウトをコードとして扱って表示できるものです カスタムViewを生成する以外にも、ListView、RecyclerView、ViewPager2などに使用されています レイアウトXMLファイルからViewを作るには直接インスタンス化するのではなく、 Activity.getLayoutInflater()または Context#getSystemService(Class)を使います getLayoutInflater:

    [Android] inflate を使ってみる
    nomadik
    nomadik 2018/05/29
    Inflator
  • [Android] WebView でウェブアプリの作成

    WebViewにはdefaultではJavaScriptやback keyなど通常のブラウザとしての機能は何もついていません。 Googleは通常のブラウザを使いたいのであればChrome等を使った方がいいと言っています。 WebView | Android Developers ではどういったケースでの使用を目的としているのでしょうか、例えば、アプリの一部として使うということです。アプリの静的なヘルプ画面をHTML で作成することなどが考えられます。 WebViewの設定: 基的な使い方は、loadUrlにURLを指定してWebViewを開きます。 // レイアウトファイル web.xml を使ったケース setContentView(R.layout.web); WebView webView = findViewById(R.id.web_view); webView.loadUr

    [Android] WebView でウェブアプリの作成
    nomadik
    nomadik 2018/05/29
    Webブラウザ
  • [Android] 音声認識 RecognizerIntent

    RecognizerIntent.ACTION_RECOGNIZE_SPEECH 言語認識は、サーバーに飛ばして結果を受取ります。基的にはネットに接続していないと使えませんが、言語認識のパッケージが端末にインストールされているのであればオフラインでも可能です。 Intent を使って Activity を遷移し、遷移先から結果を受け取るという仕組みです。 Actvity 画面遷移とデータ受け渡しが参考になります サンプルコード 結果は registerForActivityResult() で受け取りますが、いくつもの候補リストで返ってきます。ここでは順位1位のものを表示させています。 MainActivity.java //package your.package.name; import android.os.Bundle; import android.app.Activity;

    [Android] 音声認識 RecognizerIntent
    nomadik
    nomadik 2018/05/29
    音声認識
  • [Android] Storage Access Framework でドキュメントを保存する

    共有メモリにファイルを保存するためにSAF(Storage Access Framework)を利用します。ファイル保存に使うのは ACTION_CREATE_DOCUMENTです。取り出したい場合は ACTION_OPEN_DOCUMENT を使います。 SAF, Storage Access Framework SAFを使うことによりコンテンツを容易に参照できるようになりました。 ドキュメント ストレージ プロバイダ全体から簡単にドキュメント、画像、その他のファイルを参照して開くことができる 標準の Picker UI により、アプリやプロバイダを通じて一貫性のある方法でファイルにアクセスできる 図 2. ストレージ アクセス フレームワークのフロー Ref:ストレージ アクセス フレームワーク

    [Android] Storage Access Framework でドキュメントを保存する
    nomadik
    nomadik 2018/05/29
    SAF
  • [Android] Gyroscope ジャイロセンサー

    TYPE_GYROSCOPE 実装を簡単に説明すると SensorEventListener の設定 SensorManager のインスタンス生成 registerListener の登録 onSensorChanged でセンサー値の受け取り となります。実際ににやって見ましょう。 MainActivity.java //package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardw

    [Android] Gyroscope ジャイロセンサー
    nomadik
    nomadik 2018/05/29
    ジャイロセンサ
  • [Android] Accelerometer 加速度センサーをグラフにしてみた

    チャートはMPAndroidChartを使うことにしました。いろいろありますが、Androidの仕様変更に対応が比較的早いので(今の所ですが)。 チャートはLinerChartを使いました。こちら MPAndroidChart ライブラリーでグラフを描画 でも試しています。 また、SensorEvent | Android Developersにあるlow-pass filterも試してみます。 low-pass filter GoogleのSensorEventには次のような式が載せてあります。 加速度センサーの生データは敏感に反応するため、急激な変動をある程度除去して、ゆっくりした動きを取り出す、つまりlow-passのフィルタリングをした方が人間にはわかりやすい場合があります。またある程度というのが味噌で、この場合alphaという定数によって変化が変わって来ます。 public vo

    [Android] Accelerometer 加速度センサーをグラフにしてみた
    nomadik
    nomadik 2018/05/29
    加速度センサ
  • [Android] 加速度センサーで球ころがし

    Accelerometer 前回は加速度センサーの値を取得する方法でしたが、それを応用した球ころがしをスマホを傾けることによりやって見たいと思います。 コードはAndroid Studioから取り出せるSampleの中の「Accelemrometer Play」からボールが転がる箇所を切り出して簡単にしたものです。 MainActivity.java //package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; impor

    [Android] 加速度センサーで球ころがし
    nomadik
    nomadik 2018/05/29
  • [Android] 加速度センサー Accelerometer を使ってみる

    加速度センサーは端末のx, y, z軸方向の加速度を計測します。単位[m/s²] 実際(?)にその動きをAndroid Studioのemulatorから加速度センサーの動きを見てみたいと思います。 Virtuial Sensors emulatorを立ち上げて右バーのmore「…」をクリックするとExtended controlsダイアログが表れます。 「Virtual sensors」を選択、右サイドに端末が現れ、その上にある「Device Pose」をセットして、画面のスマホをマウスでドラッグすると「Rotation」によって「Resulting values」にx,y,z方向のセンサー出力が表示されます。 加速度なので動かす速度の変化で値が変わるのが分かります。 こちらはGoogleのSensorで説明されているTest with the Android Emulatorの動画です

    [Android] 加速度センサー Accelerometer を使ってみる
    nomadik
    nomadik 2018/05/29
    加速度センサ
  • [Android] Sensor 一覧を取得する

    センサーに使われているデバイスも半導体メーカーによって特性が必ずしも同じではありません。特別なセンサーを使う場合は個別にチェックしないと想定した動きになりません。 センサーリスト センサーの一覧です。 TYPE_ACCELEROMETER 加速度センサー x軸、y軸、z軸の各々の加速度 TYPE_ACCELEROMETER_UNCALIBRATED 加速度センサー(生データ) TYPE_AMBIENT_TEMPERATURE 周囲温度センサー 端末周囲の温度 TYPE_DEVICE_PRIVATE_BASE TYPE_GAME_ROTATION_VECTOR 回転ベクトルセンサー(地磁気を除く) 回転ベクトルセンサーから地磁気を除外したもので方位が不要なゲームでの利用を想定している TYPE_GEOMAGNETIC_ROTATION_VECTOR 地磁気回転ベクトルセンサー 回転ベクトルセ

    [Android] Sensor 一覧を取得する
    nomadik
    nomadik 2018/05/29
    sensor list
  • [Android] Canvas Animation で円弧を動かす

    package com.example.testcanvasanimationsimple; import android.os.Bundle; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class MainActivity extends AppCompatActivity { private int yval = 0; @Override pro

    [Android] Canvas Animation で円弧を動かす
    nomadik
    nomadik 2018/05/29
    Canvas Animation
  • [Android] Canvas drawBitmap, drawTextで画像とテキストを表示

    前のページで Canvas で描画した領域を消したり表示したりする場合にPorterDuff.Mode.CLEARを使いましたが、部分的に表示・非表示をしたい場合にはちょっと使いにくいかもしれません。 それぞれが重なっていると、重なった部分が黒抜きで消えたり色々面倒です。シンプルに全て再描画を使う方がいいかもしれません。 。

    [Android] Canvas drawBitmap, drawTextで画像とテキストを表示
    nomadik
    nomadik 2018/05/29
    Canvas テキスト表示
  • [Android] Canvas クリアーして再描画

    Canvas で描画した領域を動的に非表示にしたり表示したりする場合には、canvas.drawColor(0, PorterDuff.Mode.CLEAR) を使います。また同時に、クリアした後で再描画しますがそれには invalidate() を使います。 Canvasの再描画 TextViewなどは表示、非表示ができますがCanvasの場合はどうでしょう Cavasの場合は一旦クリアーして、その後再描画が必要です。次に表示させる時にもまた再描画が必要です 最初に簡単のためボタンで表示・非表示を実装してみたいと思います invalidate() 描画をクリアーするには、 canvas.drawColor(0, PorterDuff.Mode.CLEAR) を使います。 また再描画のためにはinvalidate()を使います。Canvasをクリアしてから描画です。 ただし、invalid

    [Android] Canvas クリアーして再描画
    nomadik
    nomadik 2018/05/29
    invalidate
  • [Android] Custom Canvas をレイアウトに挿入する

    Canvas と Paint を使って描画した図形とButtonなどを同じレイアウトに入れたい。そんな時はRelativeLayout等のレイアウトとCanvasを重ねると可能です CustomとLayout Canvasで描画していて困るのは、テキストやボタンなどと一緒にスクリーン上に表示したいというリクエストです。タッチリスナーや色々と手を尽くせば可能ですがコードが煩雑になりメンテしにくくなります。 そんな時は、Canvasで作成した描画領域、ViewをあたかもTextViewなどのようにレイアウトに張り付けることで解決できます。

    [Android] Custom Canvas をレイアウトに挿入する
    nomadik
    nomadik 2018/05/29
    Custom Canvas
  • [Android] Canvas Paint で円や矩形を描画する

    図形を描画するために Canvas と Paint クラスがあります。Canvas は絵を描くカンバスです、円や矩形などの図形をこれで設定します。 さてCanvasとは何でしょうか?GoogleAndroidフレームワークとしてグラフィックスにおいては2つの方法を提供しています。 Drawables 画像などをViewを使って表示。静的で表示させるだけの用途であり、アニメーションでも決まりきった動きのものに適している パフォーマンスを必要とするようなゲームにはあまり向かない 代表的な例は、画像をresourceのdrawableにおいてImageViewを使って表示するような例。 Canvas onDrawメソッドを使ってCanvas上で描画。ゲームなどの動きがありグラフィックスのredrawが頻繁に起きる場合や、カスタマイズされたアニメーションに向いている Ref: Canvas an

    [Android] Canvas Paint で円や矩形を描画する
    nomadik
    nomadik 2018/05/29
    Canvas
  • [Android] dp, px, dpi, sp アプリ画面の解像度単位を包括・統一的に扱う

    Android ではスクリーン上の長さを、抽象的な単位「dp」「sp」で表します。実際アンドロイドの画面サイズ解像度はメーカーによってまちまちですから、アプリを開発する側からすると何か便利な方法はないかと考えてしまいます。 ピクセル密度 Androidは様々なスクリーンサイズ(インチ)で、更に異なる画素数(ピクセル)のものが販売されていて、その1つ1つに合わせたレイアウト・デザインを作り込むのは大変です。 例えばピクセルサイズの画像の貼り付けをしたい時に問題があります。 端末のピクセルの画面サイズに合わせて画像を拡大縮小させないといけない 端末によるピクセル密度が異なることもあるので、同じピクセルサイズの画面でも物理サイズが違う場合、見え方が違う そのために dp、sp という画面サイズ、インチ数を包括し統一的に扱うことを目的とした抽象的な単位をAndroidでは提供されているわけです。

    [Android] dp, px, dpi, sp アプリ画面の解像度単位を包括・統一的に扱う
    nomadik
    nomadik 2018/05/29
    アプリ画面の解像度
  • [Android] LocalBroadcastManger を設定する

    (注) Google Reference によるとサポートが終了。代わりは、LiveData ストリームまたはリアクティブ ストリームだそうです Localbroadcastmanager LiveData の概要 | Android デベロッパー しばらくは残しておきますがいずれこの記事も削除する予定です。 Ref: LocalBroadcastManager 自アプリからデータが出て行かない 他のアプリケーションからBroadcastIntentを使ってハッキングされにくい Broadcast はグローバルにデータをシステムに投げるより効率的 逆に考えると、LocalではないBroadcastは、受信機があれば受信できてしまう ということでしょう 例として、AlarmManager と Service を使って10秒毎にカウントするテストアプリを作ってみます Service からBro

    [Android] LocalBroadcastManger を設定する
    nomadik
    nomadik 2018/05/29
    LocalBroadcast
  • [Android] カスタム Listener を interface を使って実装してみる

    処理が終わった、モードが変更されたなどを知りたい場合があります。Listenerがもともと存在するAPIであればいいのですが、そういったものがない場合にカスタムでlistenerを実装し通知させることも可能です。 custom listener ボタンをユーザーがタップしたのを知るためにlistenerをセットします。同様にあるタスクが終了、あるいは事象が変更されたらお知らせを出すメソッドが実装されているAPIがあります。こういったlistenerをカスタムでつくるためにinterfaceを活用します。 interfaceを実装するときはimplementsを使っています、Buttonがいい例です。 public class MainActivity extends Activity implements View.OnClickListener { @Override protected

    [Android] カスタム Listener を interface を使って実装してみる
    nomadik
    nomadik 2018/05/29
    Listner
  • [Android] setRepeating() の誤差と setExact() setWindow()

    Android 19 からAlarmMangerでの、set()、setRepeating()などの時間経過の誤差が大きくなりました。(inexact になったとあります) 理由は、バッテリー電力消費量を改善するためのようですが、実際どの程度なのか試してみました。 setRepeating(), set()のinexact 確かに、毎朝7時のアラームが7時1分であれば、多少は許容される場合もあるでしょうが そもそも誤差がどれだけなのかよくわかりません。OSに依存させているというのは、けっこう出たとこ勝負ではないでょうか。 テストを実施してみました。 Activity から Service を呼び、AlarmManager にそれぞれのメソッドをセットします アラーム起動は1秒後で、その後1分間隔で繰り返すテストです Nexus7 2013 を使用 またスマホはwakeupの状態 targe

    [Android] setRepeating() の誤差と setExact() setWindow()
    nomadik
    nomadik 2018/05/29
    setRepeating
  • [Android] カウントダウンするタイマーをCountDownTimerで作成する

    //package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.os.CountDownTimer; import android.os.Bundle; import android.widget.Button; import android.widget.TextView; import java.text.SimpleDateFormat; import java.util.Locale; public class MainActivity extends AppCompatActivity { private TextView timerText; private final SimpleDateFormat dataFormat = new SimpleDate

    [Android] カウントダウンするタイマーをCountDownTimerで作成する
    nomadik
    nomadik 2018/05/29
    Timer
  • [Android] ターマーやストップウォッチをSystem.currentTimeMillis() で作成するには

    System.currentTimeMillis()を使って、ミリ秒でカウントするストップウォッチ・タイマーを作ってみます。TimerTaskを使ったカウントアップタイマーと同じようにrun()やHandlerのpostを使います。 java.lang.System.currentTimeMillis() は ミリ秒で表される現在の時間を返します Ref: currentTimeMillis() – java.lang.System クラス これを使って カウント時間 = 経過時間 – 開始時間 という形でタイマーを作ります 計測間隔は public static void sleep(long millis) throws InterruptedException を使って Thread.sleep(10); のようにミリ秒のウェイトをかけて表示させるようにします 但し、これはパフォーマ

    [Android] ターマーやストップウォッチをSystem.currentTimeMillis() で作成するには
    nomadik
    nomadik 2018/05/29
    Timer
  • [Android] カウントアップするタイマー、ストップウォッチをTimerTaskで作る

    タイマーやストップウォッチはchronometerを使えば簡単にできますが、自由度があまりありません。カウントアップ専用のTimerTaskを使えば100msec刻みのタイマーが作れます。

    [Android] カウントアップするタイマー、ストップウォッチをTimerTaskで作る
    nomadik
    nomadik 2018/05/29
    Timer
  • [Android] アプリ固有の外部ストレージに画像ファイルを保存する

    こちらで アプリ固有の内部ストレージにファイルを保存 を試しましたが、画像ファイルなどの大きなファイルは内部ストレージが足りないので外部ストレージに保存します。 アプリ固有の外部ストレージ: アプリで使う画像や動画等、大きなファイルを保存できる アプリがアンインストールされると削除される 使用可能状態か確認が必要 アプリ自身からのアクセスPermissionは不要 他のアプリも適切な権限を持っていればにアクセスでき、自分のコントロールの及ばない所で読み取られる可能性がある。データ ストレージとファイル ストレージの概要 アプリがアンインストールされても残った方がいい場合などでは、共有のメディアや他の外部ストレージに保存することも可能です。 getExternalFilesDir 以前は↓を使ってダイレクトのパスを取得できましたが Environment.getExternalStorage

    [Android] アプリ固有の外部ストレージに画像ファイルを保存する
    nomadik
    nomadik 2018/05/29
    画像の保存
  • [Android] データ保存、対象範囲別外部ストレージ

    Scoped Storage と言われる「対象範囲別外部ストレージ」がAPI29で導入されました。API30では更に厳しくに適応されるようになっているようです。 これからリリースするアプリであれば、アプリのみで完結していればむしろ簡単になった気もします。 ややこしいのは requestLegacyExternalStorage の扱いでしょうか Android 10(API レベル 29)をターゲットとするアプリであれば、引き続き requestLegacyExternalStorage 属性をリクエストできます。アプリでこのフラグを指定すると、異なるディレクトリや種類の異なるメディア ファイルへのアクセス権の付与など、対象範囲別ストレージに関連する変更を一時的に無効にできます。 Android11になって、 Android 11 をターゲットとするようにアプリを更新すると、request

    [Android] データ保存、対象範囲別外部ストレージ
    nomadik
    nomadik 2018/05/29
    ExternalStorage
  • [Android] データを保存し Android Studio で確認 SharedPreferences

    アプリで使うちょっとしたデータを保存したい場合に SharedPreferences を使うと簡単にできます。但し、データが多くなるような場合は データベースを使うことが推奨されています。単純な初期化のための環境変数などの用途ということでしょう。 このSharedPreferencesは「共有の環境設定」という日語訳がされています。 共有の環境設定 キーと値のペアでプリミティブ データを保存します。 内部ストレージ 端末のメモリにプライベート データを保存します。 外部ストレージ 共有外部ストレージにパブリック データを保存します。 SQLite データベース プライベート データベースに構造化データを保存します。 ネットワーク接続 独自のネットワーク サーバーを使用してウェブにデータを保存します。 Ref: ストレージ オプション | Android Developers 後で出てきま

    [Android] データを保存し Android Studio で確認 SharedPreferences
    nomadik
    nomadik 2018/05/29
    データ保存
  • [Android] ListView アイテム個々の背景、高さなどを変える

    特定のセル背景色を変更 getView()の中で要素セルの順番はpositionで何行目かわかります。 但しあまり重くならないようにしないと遅くなったりout of memoryになる可能性が増します @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; // 最初だけ View を inflate して、それを再利用する if (convertView == null) { // activity_main.xml に list.xml を inflate して convertView とする convertView = inflater.inflate(itemLayoutId, parent, false); // ViewHolder

    [Android] ListView アイテム個々の背景、高さなどを変える
    nomadik
    nomadik 2018/05/29
    ListView アイテム調整
  • [Android] BaseAdapterで画像とテキストをListView表示

    カスタムadapterを作成する手順としては: BaseAdapterを継承したクラスを作成 getView() メソッドをオーバライト リスト項目のレイアウトをカスタマイズ 基的なBaseAdapterの構造は // BaseAdapterを継承したクラス private class TestAdapter extends BaseAdapter { private Context context; public TestAdapter(Context context) { super(); this.context = context; } @Override public int getCount() { return data.length; } @Override public Object getItem(int position) { return position; }

    [Android] BaseAdapterで画像とテキストをListView表示
    nomadik
    nomadik 2018/05/29
    ListView
  • [Android] ListActivity の使い方

    ListView のためのActivityとしてリスト表示専用のアクティビティであるListActivityクラス使う方法があります。 ただし、API30で非推奨となりました。 サンプルコード 簡単にListActivityを使ってみます。 ListViewオブジェクトを既に含んだListActivityを使っているので、新たにListViewのインスタンスを生成して、アクティビティにセットする必要がありません。 setAdapter() ではなく setListAdapter() を使います CellData class にて画像とテキストを子要素として設定します。 以下を参考にさせていただきました。 Android GridView でアイコンと文字のレイアウト MainActivity.java //package your.package.name; import androidx

    [Android] ListActivity の使い方
    nomadik
    nomadik 2018/05/29
    ListActivity
  • [Android] ArrayAdapter を使ってレイアウトをアレンジする

    Header & Footer ヘッダーやフッターをListViewに追加するメソッド addHeaderView addFooterView があります。ただこれはちょっと期待したものと少し違うと(個人的に)思いましたので、汎用的作ってみました。作り方はいろいろあるとは思います。 レイアウトとしてRelativeLayoutを使いヘッダーはListViewとまとめてLinearLayoutに入れる。フッターとしてのボタンはBottomに張り付ける形です。 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.c

    [Android] ArrayAdapter を使ってレイアウトをアレンジする
    nomadik
    nomadik 2018/05/29
    ListView
  • [Android] ListView と ArrayAdapter 簡単なテキストリストの表示

    スマホでは色々な場面でリスト表示が使われます。リストのitemはダイナミックに増減できてスクロールすれば限られた画面内で多くの情報を扱えるためとても便利なわけです。 ListViewはスクロール可能なアイテムのリストを表示するViewグループです。 Adapterは配列またはデータベースなどからそれぞれの要素をリストに入れられるように変換し自動的に挿入してくれます。 ListViewに使うAdapterには用途に応じて ArrayAdapter、BaseAdapter、SimpleAdapter、それ以外にもいくつもあります。 ArrayAdapter BaseAdapterを継承して、簡単な TextView のリストを表示する(これを継承してカスタムでアダプターを作ることも可能) SimpleAdapter Mapクラスを使ってリスト項目のレイアウトをカスタマイズする BaseAdap

    [Android] ListView と ArrayAdapter 簡単なテキストリストの表示
    nomadik
    nomadik 2018/05/29
    ListView
  • [Android] Fragment から別の Fragment に画面遷移させてみる

    Fragment から Fragmentへ遷移 FragmentからFragmentへの画面遷移ですが、以下の動画のような動きをさせてみました。 これは、BackStackに状態を保存しながらカウントアップで2つのFragmentを遷移させています。 ActivityからFragment01を表示 Fragment01からFragment02へ遷移: 0 (カウンター) Fragment02からFragment01へ遷移: 1 Fragment01からFragment02へ遷移: 2 … Fragment02からFragment01へ遷移: 10 BackStackを使って戻ります Fragment01からFragment02へ戻る: 9 … Fragment01からFragment02へ戻る: 1 Fragment02からFragment01へ戻る: 0 Fragment01からActi

    [Android] Fragment から別の Fragment に画面遷移させてみる
    nomadik
    nomadik 2018/05/29
    Fragment の画面遷移
  • [Android] Activity と Fragment の画面遷移

    FragmentをActivityからコードで設定してHello Worldを表示させてみましたが、今度はActivityからFragment画面への切り替えをしてみましょう。いわゆる画面遷移ですが、Activity間の移動ではないので重くありません。

    [Android] Activity と Fragment の画面遷移
    nomadik
    nomadik 2018/05/29
    Fragment の画面遷移
  • [Android] Fragment コードで記述する

    FragmentはActivityと共に重要な機能を果たしていますが、いまいちわかりにくところがあります。最初に簡単なHello WorldをJavaコードで記述して表示させるところから始めてみましょう。

    [Android] Fragment コードで記述する
    nomadik
    nomadik 2018/05/29
    Fragment
  • [Android] FragmentをHello Worldから始めるみる

    FragmentはActivityと共に重要な機能を果たしていますが、いまいちわかりにくところがあります。最初に簡単なHello Worldを表示させるところから始めてみましょう。 AndroidではActivityは重要な機能を司っていますが、勢いなんでもかんでもActivityに機能を入れてしまって巨大なActivityが出来上がってしまいます。これではメンテナンスがやりにくいコードになってしまい、チームでの開発がより困難になります。 Fragmentは「断片」という意味ですが、ActivityのUI部分を肩代わりでき、いくつものFragmentをActivityから開いたり閉じたりできます。 また、複数のActivityから使いまわすような再利用も可能です。 Activityには以下の役割があります Viewの生成と制御 リソースを取得したりするContextのタスク コンポーネント

    [Android] FragmentをHello Worldから始めるみる
    nomadik
    nomadik 2018/05/29
    Fragment