- 投稿日:2019-08-04T23:40:37+09:00
Androidでグラフを作ってみる
グラフをアプリの中に表示させるとき、調べてみるとMPAndroidChartを使う方法があるみたいで、簡単なサンプルを作って試してみました。
データを取得できれば、なかなかお手軽でいいですね!
今後も使いそうなので、手順を残そうかと思います。①ライブラリの導入
まずはMPAndroidChartライブラリを導入します。
build.gradle(Project)allprojects { repositories { // 追加 maven { url 'https://jitpack.io' } } }build.gradle(app)dependencies { // 追加 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' }②レイアウトの作成
レイアウトの作成を行います。
今回はシンプルに画面いっぱいにグラフを表示させるだけです。activity_main<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.github.mikephil.charting.charts.LineChart android:id="@+id/lineChart" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.constraint.ConstraintLayout>③Actitvityの作成
Activityではグラフの作成を行います。
グラフの作成するにあたって、データの設定とグラフの設定(X軸やY軸など)がメインで必要になります。
グラフ表示のオプションはたくさんあるので、リファレンスを見て、必要なら追加するのがいいと思います。MainActivity.ktclass MainActivity : AppCompatActivity() { // スタイルとフォントファミリーの設定 private var mTypeface = Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL) // データの個数 private val chartDataCount = 20 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // グラフの設定 setupLineChart() // データの設定 lineChart.data = lineData(chartDataCount, 100f) } // LineChart用のデータ作成 private fun lineData(count: Int, range: Float):LineData { val values = mutableListOf<Entry>() for (i in 0 until count) { // 値はランダムで表示させる val value = (Math.random() * (range)).toFloat() values.add(Entry(i.toFloat(), value)) } // グラフのレイアウトの設定 val yVals = LineDataSet(values, "テストデータ").apply { axisDependency = YAxis.AxisDependency.LEFT color = Color.BLACK // タップ時のハイライトカラー highLightColor = Color.YELLOW setDrawCircles(true) setDrawCircleHole(true) // 点の値非表示 setDrawValues(false) // 線の太さ lineWidth = 2f } val data = LineData(yVals) return data } private fun setupLineChart(){ lineChart.apply { description.isEnabled = false setTouchEnabled(true) isDragEnabled = true // 拡大縮小可能 isScaleXEnabled = true setPinchZoom(false) setDrawGridBackground(false) //データラベルの表示 legend.apply { form = Legend.LegendForm.LINE typeface = mTypeface textSize = 11f textColor = Color.BLACK verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM horizontalAlignment = Legend.LegendHorizontalAlignment.LEFT orientation = Legend.LegendOrientation.HORIZONTAL setDrawInside(false) } //y軸右側の設定 axisRight.isEnabled = false //X軸表示 xAxis.apply { typeface = mTypeface setDrawLabels(false) // 格子線を表示する setDrawGridLines(true) } //y軸左側の表示 axisLeft.apply { typeface = mTypeface textColor = Color.BLACK // 格子線を表示する setDrawGridLines(true) } } } }完成したのはこんな感じです。
線グラフ以外にも棒グラフや円グラフなど、多様に使えそうなので、いろいろ試してみたいと思います。
参照
- 投稿日:2019-08-04T18:28:44+09:00
Android Studioをもっと便利に使うためのショートカット設定
Android Studioで色々とショートカットを設定して、便利な機能を活用できるようになったのでまとめておきます。
表記は全てMacなので、Windowsの方は
⌘をCtrlに置き換えて設定してください。ショートカットの設定方法
ショートカットの設定方法は、
Android Studio > Preferences...または⌘ + ,で設定画面を開き、keymapメニューから設定したい操作を検索して、ショートカットコマンドを登録します。便利なショートカット設定
新しいプロジェクトを
⌘ + oで開く既存の設定だと
⌘ + oはクラス検索になっているのですが、個人的には新しいプロジェクトを開いてほしいので、ショートカットを上書きします。
KeymapからOpen...を検索して、⌘ + oを割り当てます。これで、他のプロジェクトの実装を確認したくなったときに、すぐに開いて確認することができます。
画面分割を
⇧ + ⌘ + dで行うAndroidの開発をしていると、画面分割をしてlayoutとActivityファイルを並べて確認したり、関連するファイルを見比べながらコードを書いたりすることが多いので、画面分割のショートカットがあると便利です。
Split Verticallyを検索して⇧ + ⌘ + dを割り当てて、以下のような画面分割が簡単にできるようにします。単語の複数選択を
⌘ + dで行うvscodeやsublime textなどのエディタでは、単語の複数選択が
⌘ + dで行えて、一斉に単語の修正ができるので、Android Studioでも設定します。
Add Selection for Next Occurrenceを検索して⌘ + dを割り当てます。
以下のように複数カーソルをあてることができるようになります。変数の一括置換を
F2で行う上の単語の複数選択では、同一の単語の置換ができるのですが、変数の複数選択では、その変数を参照している全ての部分に対して置換を行うことができます。
別ファイルで参照されているものも同時に修正が行われるのでけっこう便利で、変数だけでなく、ファイル名やパッケージ名の修正にも使えます。
Refactor > Rename...をvscodeでのショートカットに合わせてF2に設定します。例えば、data classの名前を変えたくなった場合は、そのクラス名を選択して
F2を押せば、以下のように参照している部分のクラス名が一括で置換されます。ファイルの保存時にコードフォーマットと不要なimport文の削除を行う
Android Studioでは、デフォルトで自動保存が行われるのですが、それに加えてコードフォーマットとimport分の最適化も行って欲しいので、
Save Actionsというプラグインを入れて、⌘ + sにショートカットを割り当てます。プラグインを入れたら、下記のようにSave Actionsの設定画面から
Activate save actions on saveを有効にし、actionとしてOptimize importsとReformat fileを有効にすれば、保存時にコードフォーマットとimport文の最適化が行われるようになります。Github関連のショートカット
Android StudioとGithubを連携するとGitを使った個人やチームでの開発が便利になります。
Githubとの連携方法
VCS > Git > Create Pull Requestを選択すると、初回はログインダイアログが出るので、そこにユーザー名とパスワードを入力すれば連携することができます。これで手元のコードが参照しているGithubのブランチと連携することができたので、Android StudioからいくつかGithubに対するアクションを行うことができるようになります。
Git Fetchを
⌘ + 0で行う個人的にはGit Fetchをけっこう頻繁に使うので、Android Studioのショートカットに設定しています。
⌘ + fとかが検索で使われているので、0から始めるために情報を取ってくる、という意味を込めて⌘ + 0を割り当てています。
VCS > Git > Fetchを⌘ + 0に割り当てておくと、いつでも一発でfetchできるので地味に便利だったります。Pull Requestの一覧を
⌘ + ⇧ + pで確認するAndroid Studioに最近入った機能として、
View Pull Requestsというものがあります。
これを使うと以下のようにPull Requestの一覧がAndroid Studioで見ることができて、変更差分を含めたファイル全体も確認することができます。下タブに表示されているのがPull Requestの内容で、左から、「Pull Requestの一覧」、「Pull Requestの詳細」、「Pull Requestの変更差分」が表示されます。
特にチーム開発をする時には最もよく使う機能なので、ショートカットに登録しておくと便利でしょう。
Plug-ins > Github > View Pull Requestsに⌘ + ⇧ + pを割り当てるのがおすすめです。今回はオリジナルのショートカットを割り当てていきましたが、既存のショートカットの活用については以下の記事を参考にしています。
他にも良さそうな機能を見つけたら、ショートカットに割り当ててこの記事も更新していこうと思います。
- 投稿日:2019-08-04T16:42:34+09:00
DroidVimとGboardの組み合わせでちょっとだけ楽をしたい
楽しいですよね、DroidVim。……いや正直ただのオモチャにしている感じなんですがまぁ、楽しんでいます。ただ、フルキーを駆使するのが前提のVimをタッチデバイスで扱うのは流石にストレスを感じることも多いんです……特に記号とか、特に記号とか!というわけで、少しでも改善できそうな方法を探して、何とかしてやろうというやつです。というよりまたスクリプトを増やしてしまいました。
OLLIE
最近DroidVimに少しだけ変更がありまして、IMEの処理に
iminsertが使えるようになりました。それに伴い、ファンクションバー1に<C-^>をアサインすることが出来るようになり、マニュアルにはGboardの為のコンフィグの例まである感じで……これ自体はモード遷移での恩恵なんですが。ノーマルモード中の
<C-^>はデフォルトで「代替ファイルの編集」がマップされており、ノーマルモード中のIME処理に影響はなく、またそもそもこのマップを知らなかったので、必要なときには:e #を使っています。むしろモードに気が付かずにバッファが変わってしまうのに苛立ちを……まぁ誤爆して苛立つキーなら潰すまではともかく、より使いたい機能をマップしてしまえばいいわけですよ。例えば<C-^>[a-z]でgboardの右肩の記号がロングタップなしで打てるとか。スケボーキング
plugin/gboard.vimscriptencoding utf-8 function gboard#map(IFSize) abort for l in keys(g:longTap) execute 'map <C-^>'.l g:longTap[l][a:IFSize] execute 'omap a<C-^>'.l 'a'.g:longTap[l][a:IFSize] execute 'omap i<C-^>'.l 'i'.g:longTap[l][a:IFSize] execute 'vmap a<C-^>'.l 'a'.g:longTap[l][a:IFSize] execute 'vmap i<C-^>'.l 'i'.g:longTap[l][a:IFSize] endfor endfunction function gboard#unmap() abort for l in keys(g:longTap) try execute 'unmap <C-^>'.l execute 'ounmap a<C-^>'.l execute 'ounmap i<C-^>'.l execute 'vunmap a<C-^>'.l execute 'vunmap i<C-^>'.l catch /E31/ continue endtry endfor endfunction function gboard#main(isBang,...) abort if a:isBang !=? '!' if a:0 > 0 && a:1 =~? '^\(large\|small\)$' if a:1 ==? 'large' let IFSize = 1 else let IFSize = 0 endif call gboard#map(IFSize) if v:vim_did_enter echo printf('[gboard]: Mapped for %s display.', tolower(a:1)) endif else echo '[gboard]: Maps from gboard.vim' nmap <C-^> endif else call gboard#unmap() echo '[gboard]: Unmapped.' endif endfunctionplugin/gboard.vimscriptencoding utf-8 if !exists('g:longTap') let g:longTap = { \ 'q': ['%', '^' ], \ 'w': ['\', ',' ], \ 'e': ['\|', '\|'], \ 'r': ['=', '=' ], \ 't': ['[', '[' ], \ 'y': [']', ']' ], \ 'u': ['<', '<' ], \ 'i': ['>', '>' ], \ 'o': ['{', '{' ], \ 'p': ['}', '}' ], \ 'a': ['@', '@' ], \ 's': ['#', '#' ], \ 'd': ['$', '$' ], \ 'f': ['_', '_' ], \ 'g': ['&', '&' ], \ 'h': ['-', '-' ], \ 'j': ['+', '+' ], \ 'k': ['(', '(' ], \ 'l': [')', ')' ], \ 'z': ['*', '\' ], \ 'x': ['"', '%' ], \ 'c': ['''', '*' ], \ 'v': [':', '"' ], \ 'b': [';', ''''], \ 'n': ['!', ':' ], \ 'm': ['?', ';' ], \ '.': ['/', '/' ], \ '<C-^>': ['<C-^>', '<C-^>'] \ } endif command -nargs=? -bang Gboard call gboard#main('<bang>', <f-args>)まぁ、アルファベット全部に
mapするわけで必然的にやぼったい設定が必要になります……仕方ないね。METHOD
基本的にforループをブン回して
mapするだけなんですが、gboardの仕様が画面サイズによってロングタップの文字が変わるので、両方の設定に対応できるようにしています。正直「他は知らん」でも良かった気がするのですが、一応カスタム出来るようにしておきました。ちょっとした気の利かせ的に.のロングタップで出せる、というより何故かロングタップしないと出せない/を<C-^>.で打てる気遣いをしているんですが、/自体はDroidVimのファンクションバーにアサインできるので必要ないかもしれないです。一応<C-^>のもとの機能は<C-^><C-^>に振り直しています。
キーボードの近くに、ある程度カスタマイズできるオンスクリーンキーが……この説明やぼったいなぁ。Playストアからスクショ見てください。マニュアルで言うところの
◇を活用したいという話をしています。 ↩
- 投稿日:2019-08-04T02:36:42+09:00
開発者オプションの最小幅を上げすぎたら起動しなくなった話
みなさん最小幅いじってますかー?
でも何事もやりすぎはよくないよねって話。
環境
OS:Android 9
事の顛末
なんとなく最小幅をいじってあそんでた
↓
調子に乗って1000ptにしてしまう
↓
画面が表示されなくなる
↓
強制終了からの再起動してみる
↓
ブートループに陥る ((^ω^≡^ω<ギャアアアアアアア
↓
TWRPを焼いてデータを救出しようとするもブートアンロックしてないことを思い出す
↓
.
.
.
↓
やむなくWipe Dataすることに(アア...データガ...)悲しいなぁ...(´・ω・`)
結論
- 最小幅のいじりすぎはよくないよ
- データはバックアップしとこうね
- 念のためブートアンロックしとくと何かあった時に役に立つよ









