2011年2月8日火曜日

【android アプリ 開発】 ImageView 作成 -①






■ImageView 作成

ImageViewは、イメージを表現するレイアウトです。 以下の例は、リソースに関する情報を取得してImageViewレイアウト上に表現しています。 例のソースのようにImageViewのsetImageResource関数を使用して、リソースのデータを そのまま入れることもできますが、普通は好みに合わせてサイズを変更したり、容量を減らすなどの 作業をしてから使用することが多いです。 この時には、リソースデータをBitmapデータに変換した後のサイズを操作する関数で容量を減らす ことができます。 Bitmapデータのサイズを調整した後、setImageBitmap関数の パラメータに画像を入れた例です。


ImageView iv = new ImageView(this);
Bitmap orgImage = BitmapFactory.decodeResource(getResources(), R.drawable.news);
Bitmap resize = Bitmap.createScaledBitmap(orgImage, 300, 400, true);
iv.setImageBitmap(resize);


上記の例では、リソースの映像を持ってきてセットしたのもで、SDCARDから画像をインポートしてセットすることもできます。まず、エミュレータを使用する場合SDCARDイメージに画像をコピーしてdecodeFile関数を呼び出します。
第一パラメータにはファイルが存在するアドレスを入れて、第二パラメータには、BitmapFactory.Optionsのオプションの値が入ります。これはどのような形でロードするかを決める値になります。




ImageView iv = new ImageView(this);
BitmapFactory.Options bo = new BitmapFactory.Options();
bo.inSampleSize = 8;
Bitmap bmp = BitmapFactory.decodeFile(thumbsDataList.get(position), bo);
iv.setImageBitmap(bmp);


XMLを使用せず、純粋に、ソース内でレイアウトオブジェクトを生成し、画面を表現するサンプルになります。ソースでLinearLayoutは、最上位のレイアウトであり、ここにImageViewオブジェクトを生成して入れています。mLinearLayout.addView(iv);と同じです。
そして、LayoutParams.FILL_PARENTは、XMLでのlayout_width="fill_parent"と同じ表現で、親レイアウトのサイズに合わせて詰めることになります。


package my.HelloImageView;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Gallery.LayoutParams;

public class HelloImageView extends Activity {

private LinearLayout mLinearLayout;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
        // ImageView を追加するための LinearLayout 生成
        mLinearLayout = new LinearLayout(this);
  
        // ImageView オブジェクト生成
        ImageView iv = new ImageView(this);
        iv.setImageResource(R.drawable.test01);
        iv.setAdjustViewBounds(true);
        iv.setLayoutParams(new Gallery.LayoutParams(
               LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        iv.setScaleType(ImageView.ScaleType.FIT_XY); // レイアウトのサイズにイメージを合わせる
  
        mLinearLayout.addView(iv);
        setContentView(mLinearLayout);

    }
}





上で簡単に紹介した例をもとにオプションの設定に応じて、どのように表現ができるか確認して見ましょう。
XML attributeには、次のような種類がある。


android:adjustViewBounds:イメージが表現しようとするのレイアウトよりも大きいときの比率を維持するかどうか
android:cropToPadding:画像をカットするかどうか
android:maxHeight:最大の高さ
android:maxWidth:最大の幅
android:scaleType:画像の表示のためのサイズ変換
android:src:imageアドレスを設定するための設定。リソースのイメージは、@drawable/test01
android:tint:着色に関連する様々なオプション



Blog Archive