「五章:画像を出すⅡ」の編集履歴(バックアップ)一覧はこちら
五章:画像を出すⅡ - (2013/08/05 (月) 15:25:50) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
前回使用した「ImageView」だと凝ったことをするには不向きな感じがある。
そこで、ある程度自由にできる方法で画像を出してみる。
***・画像を表示する
#region(クリックして開く)
&bold(){今までとはちょっと雰囲気の違うことをするよー}
今回は&bold(){&u(){レイアウトファイルを使用しないで画面に画像を出す。}}
前回使ったImageViewはレイアウトファイル内に設定を行っていたが、
自前でViewを作ることでレイアウトファイルを用いないことで自由度が増す。
自前のViewをカスタムビューという。この辺は表記揺れが大きいのでインターネットを漁って
自分なりにしっくりくる表現を見つけることをオススメする。
・以下ソース(MainActivity.java)
#highlight(linenumber, java){{
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//カスタムビュークラスを設定する
MyView view = new MyView(this);
setContentView(view);
}
}
class MyView extends View
{
private int x; //画像のx座標
private int y; //画像のy座標
private Bitmap bmp; //変換後の画像
private Paint paint = new Paint();
Resources res = this.getContext().getResources(); //変換後の画像の格納先
public MyView(Context context)
{
super(context);
setFocusable(true);
//座標の初期化
x = 0;
y = 0;
}
/*******
* 描画
******/
protected void onDraw(Canvas canvas)
{
//背景色を設定
canvas.drawColor(Color.WHITE); //白に設定する
//リソースファイル内の画像をBitmapに変換して格納する。
bmp = BitmapFactory.decodeResource(res, R.drawable.img);
//変換したBitmapで描画
canvas.drawBitmap(bmp, x, y, paint);
}
}
}}
#endregion
***・今回やった新しいことの簡単なまとめ
#region(クリックして開く)
&bold(){・カスタムViewクラスの作成}
先に述べたとおり、ImageViewのような既に完成されたものを利用するのではなく、
自前で必要な機能を実装できるカスタムビューは自由度が増す。
実装方法はActivityクラスでカスタムViewクラスを宣言し、
それをsetContentViewでビューに設定する。
あとは上記ソースを参照。
&bold(){・BitmapFactory}
ImageViewでは画像を指定してしまえば勝手に処理をやってくれる感じだったが、
自前のViewでは読み込んだ画像をそのまま出すことは許されない。
そこでリソースに登録された画像をBitmapに変換する処理が必要になる。
&bold(){・canvas.drawColor}
画面の背景色を設定できる。
canvasとは独自のViewを使うときに「描かれるためのもの」として利用する機能。
ImageViewなどの出来合いのViewを用いる時でも裏では利用されているが、
そっちではあまり意識することはないだろう。
#endregion
前回使用した「ImageView」だと凝ったことをするには不向きな感じがある。
そこで、ある程度自由にできる方法で画像を出してみる。
***・画像を表示する
#region(クリックして開く)
&bold(){今までとはちょっと雰囲気の違うことをするよー}
今回は&bold(){&u(){レイアウトファイルを使用しないで画面に画像を出す。}}
前回使ったImageViewはレイアウトファイル内に設定を行っていたが、
自前でViewを作ることでレイアウトファイルを用いないことで自由度が増す。
自前のViewをカスタムビューという。この辺は表記揺れが大きいのでインターネットを漁って
自分なりにしっくりくる表現を見つけることをオススメする。
・以下ソース(MainActivity.java)
#highlight(linenumber, java){{
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//カスタムビュークラスを設定する
MyView view = new MyView(this);
setContentView(view);
}
}
class MyView extends View
{
private int x; //画像のx座標
private int y; //画像のy座標
private Bitmap bmp; //変換後の画像
private Paint paint = new Paint();
Resources res = this.getContext().getResources(); //変換後の画像の格納先
public MyView(Context context)
{
super(context);
setFocusable(true);
//座標の初期化
x = 0;
y = 0;
}
/*******
* 描画
******/
protected void onDraw(Canvas canvas)
{
//背景色を設定
canvas.drawColor(Color.WHITE); //白に設定する
//リソースファイル内の画像をBitmapに変換して格納する。
bmp = BitmapFactory.decodeResource(res, R.drawable.img);
//変換したBitmapで描画
canvas.drawBitmap(bmp, x, y, paint);
}
}
}}
#endregion
***・今回やった新しいことの簡単なまとめ
#region(クリックして開く)
&bold(){・カスタムViewクラスの作成}
先に述べたとおり、ImageViewのような既に完成されたものを利用するのではなく、
自前で必要な機能を実装できるカスタムビューは自由度が増す。
実装方法はActivityクラスでカスタムViewクラスを宣言し、
それをsetContentViewでビューに設定する。
あとは上記ソースを参照。
&bold(){・BitmapFactory}
ImageViewでは画像を指定してしまえば勝手に処理をやってくれる感じだったが、
自前のViewでは読み込んだ画像をそのまま出すことは許されない。
そこでリソースに登録された画像をBitmapに変換する処理が必要になる。
&bold(){・canvas.drawColor}
画面の背景色を設定できる。
canvasとは独自のViewを使うときに「描かれるためのもの」として利用する機能。
ImageViewなどの出来合いのViewを用いる時でも裏では利用されているが、
そっちではあまり意識することはないだろう。
#endregion
***・画像にアクションをしていく
#region(クリックして開く)
追加するのはほんの少しだけ。
onDrawの下あたりに追記する。
以下ソース
#highlight(linenumber, java){{
/*******
* タッチ
******/
public boolean onTouchEvent(MotionEvent event)
{
//タッチ座標を取得する
x = (int)event.getX();
y = (int)event.getY();
invalidate();
return true;
}
}}
#endregion