ノンプログラマー・プログラミング・ガイド

ほぼ独学。もはやおっさんになりかかってからプログラミングの勉強開始。HTML、CSS、JavaScript、SQL、PHP、Javaがなんとなく解る。Joomla!とandroidで書いたプログラムを配布中。iPhoneアプリ作りたいからMacくれ(下さい)。

2013年06月

アプリ内で課金できるAPIがin-app Billing。で、そのAPIはどーやって使えばいいんだと調べてたら、TrivialDriveなるサンプルが入ってました。が、インストールの仕方が解らなかったので、記事にしてみます。この記事は、In-app billing Version 3を対象としてます。


サンプルのアプリをGoogle Playで作成しとく

In-APP課金は、Google Playとの連携が必要で、Goole Playに登録してあるアプリでないと使えません。で、Google PlayでこのInAppのサンプルを動かすためだけのアプリを作成しておきます。

Public Keyの取得

デベロッパー単位じゃなくて、アプリ単位でpublic keyが割り振られるみたいです。Google Play Developersで作成したアプリを選択して、メニューの「サービス&APIs」を選択。「In-APPライセンス」とかで表示されてる値がPublic Keyです。後で、コード内に書いてやる必要があります。


続きを読む

graph_bar
Android用のグラフのライブラリーもあるみたいですけど、いまいちなのでオリジナルな棒グラフを作成してみます。プログラミングの大した技量が僕には無いので至ってシンプルな棒グラフです。ちなみに、オリジナルな棒グラフは配布中のカウンターアプリにも乗せているので、試してみてください(営業)。


カスタムビューの作成

クラス名は何でも良いんですけど、棒グラフだし、僕のイニシャルはHSなので、HsGraphBarというクラスを作成します。extendsするのは、Viewでもイイ気がするんですが、なんとなくLinearLayoutを拡張します。
package jp.blogcms.livedoor.hsgraph;

import android.content.Context;
import android.graphics.Canvas;
import android.widget.LinearLayout;

public class HsGraphBar extends LinearLayout{
	
	/**
	 * コンストラクター
	 * Viewのクラス内では、getContext()でcontextの取得ができる
	 * 
	 * @param context
	 */
	public HsGraphBar(Context context) {
		super(context);
	}
	
	/**
	 * AddViewなんかで実際にviewが追加されたときに呼び出される
	 * 
	 */
	@Override
	protected void onAttachedToWindow(){
		super.onAttachedToWindow();

	}
	
	/**
	 * タテヨコの大きさを決める時に呼び出される
	 * Viewの大きさを指定したい場合は、ここで指定
	 * 
	 */
	@Override
	protected void onMeasure(int width, int height) {
		super.onMeasure(width, height);
	}
	
	
	/**
	 * レイアウトを決める時に呼び出される
	 * 
	 */
	@Override
	protected void onLayout(boolean changed, int l, int t, int r, int b) {
		super.onLayout(changed, l, t, r, b);
	}
	
	/**
	 * 描画する!
	 * 
	 */
	@Override
	public void onDraw(Canvas canvas) {
		super.onDraw(canvas);
	}
}
Viewのきっと使うであろうイベントです。この上の並んだ順番で、それぞれのメソッドはViewを作成するときに必ず呼び出されます。グラフ作成で大事なのは、onMeasureとonDarawかと思います。使わないイベントは消しちゃって構いません。まぁ、正直なところandroidのViewの生成のされ方に関して、僕も大して理解してません・・・。察しの通り、上記はイベントを書いただけなんで、内容は無いよう・・・。



続きを読む

androidでのカスタムビューの作り方は他のブログにいっぱい書いてあるので置いといて、文字をcanvasで書く方法やら。

基本的な使い方

Paint paint = new Paint();
		
//anti-Alias!
paint.setAntiAlias(true);
		
//テキストの色
paint.setColor(Color.parseColor("#777777"));
		
//テキストのサイズ
paint.setTextSize(11); 
		
//文字を書く!
canvas.drawText("書きたい文字", 0, 0, paint); 	
 
  Paintで文字の色やらサイズを指定して、onDraw内でcanvas使って書きます。Paintは、円や四角形を書くときなんかも使うので、個人的には解りづらいといえば解りづらい・・・。

canvas.drawText("書きたい文字", 0, 0, paint); 	
drawTextの引数
  • 第一引数は、書きたい文字
  • 第二引数は、x座標の位置
  • 第三引数は、y座標の位置
  • 第四引数は、設定したPaintを渡します 

この例では、xが0でyが0を指定しているので、Paintでalignを指定していないので(後述)左上が文字を書き始める開始位置となります。

ちなみにカスタムビュー内の一番下に書きたい場合は、
canvas.drawText("書きたい文字", 0, getMeasuredHeight(), paint); 	
getMeasuredHeight()でカスタムビューの高さを取ってやればいいのかと。まぁ、これだと、なんでかyとかgとかの文字の下側を考慮してくれないみたいなので、 getMeasuredHeight() - paint.descent()をした方が文字が全部表示されるみたい・・・。


続きを読む

SyntaxHighlighterは、コードをハイライト表示してくれるJavaScriptのライブラリーです。JavaScriptをハイライト表示するとこんな感じ。

$(document).ready(function() {
function path()
{
  var args = arguments,result = [];       
  for(var i = 0; i < args.length; i++)
      result.push(args[i].replace('@', '<$BaseUrl$>/syntaxhighlighter/scripts/'));
  return result
};
 
SyntaxHighlighter.autoloader.apply(null, path(
  'css                    @shBrushCss.js',
  'java                   @shBrushJava.js',
  'js jscript javascript  @shBrushJScript.js',
  'php                    @shBrushPhp.js',
  'text plain             @shBrushPlain.js',
  'sql                    @shBrushSql.js',
  'xml xhtml xslt html    @shBrushXml.js'
));


SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
});
 


続きを読む

imagesizes
androidは、いろんなデバイスで動くように設計されていて、androidのアプリで画像を使う場合、それぞれのデバイスの解像度に応じて画像を用意する必要があります。最初、よくわかんなかったんですけど、たぶんこんな感じで作れば、うまくいくはず・・・。まぁ、面倒くせぇ・・・。

そのままのサイズの画像は、mdpi

パソコンで見たまんまの1px=1dpiとなるのがたぶんmdpiです!このpxサイズをそのままlayoutのdpやらに使用します。たとえば、アプリに100dp*100dpの画像を置きたい場合は、まずはパソコンで見たまんまの100px*100pxの画像を用意してやります。これがmdpiでの画像サイズです。


 

mdpiをベースに他のサイズを作る

で、mdpiをベースに他の画像サイズを計算してみます
  • hdpiは、mdpiの1.5倍
  • xdpiは、mdpiの2倍
  • xxdpiは、mdpiの3倍
たとえば、mdpiでヨコ100pxタテ100pxの画像を用意したとしたら、hdpiは150px*150pxとなり、xdpiは、200dp*200dpとなります。ちなみにldpiは、mdpiの0.75倍なんですけど、ldpiの低解像度のデバイスってあんのか・・・。

あと、この考え方が解ったならば、逆にも計算できるようになる・・はず。デザインするときに大き目のxdpiなんかでデザインして、それをmdpiに戻す場合は、xdpiの0.75倍がhdpiで、0.5倍がmdpi・・・・・。


mdpiの画像サイズは偶数にする?

mdpiの画像サイズを偶数にしとけば、hdpiで小数点以下がでないのでいいのかもしれません・・・・。まぁ、ぶっちゃげ、小数点以下の値なんて気にする必要もないような


 
 

このページのトップヘ