ImageViewの使い方
Bitmapに画像を設定しBitmapをImageViewに設定することで
ImageViewに画像を表示させています。
追加したい画像をコピー状態にします。(画像ファイルを右クリックしてコピー)
app→res→mipmap→Pasteを選択します。
このサンプルでは「mipmap-hdpi」を選択しています。
選択したファイルがmipmapの配下に追加されます。
フォルダを見ても画像ファイルが追加されていることがわかります。
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
//Buttonの宣言
import android.widget.Button;
//ImageViewの宣言
import android.widget.ImageView;
//Bitmapの宣言
import android.graphics.Bitmap;
//BitmapFactoryの宣言
import android.graphics.BitmapFactory;
//RelativeLayoutの宣言
import android.widget.RelativeLayout;
//Viewの宣言
import android.view.View;
//クリックイベント用に追加
import android.view.View.OnClickListener;
//Resourcesの宣言
import android.content.res.Resources;
//ログ出力の宣言
import android.util.Log;
public class MainActivity extends AppCompatActivity implements OnClickListener {
//setId用の管理番号
private int mNo1;//ボタン(画像表示用)
private int mNo2;//ボタン(画像消去用)
private int mNo3;//ListView用
private Bitmap bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout layout = new RelativeLayout(this);
setContentView(layout);
//座標の初期設定
int x=0;
int y=0;
int width=0;
int height=0;
x=50;
y=50;
width=200;
height=60;
Button btn1=new Button(this);
mNo1 = View.generateViewId();
btn1.setId(mNo1);
//配置を設定
RelativeLayout.LayoutParams obj1 = getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
btn1.setText("画像を設定");
btn1.setOnClickListener(this);
layout.addView(btn1, obj1);
x=250;
y=50;
width=200;
height=60;
Button btn2=new Button(this);
mNo2 = View.generateViewId();
btn2.setId(mNo2);
//配置を設定
obj1 = getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
btn2.setText("画像を消す");
btn2.setOnClickListener(this);
layout.addView(btn2, obj1);
//配置を設定
x=50;
y=200;
width=100;
height=100;
obj1 = getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
mNo3 = View.generateViewId();
ImageView imageview=new ImageView(this);
imageview.setId(mNo3);
layout.addView(imageview, obj1);
//画像を表示します。
setImage();
//画像解放処理についてもメソッドを実装すること
}
@Override
//ボタンがクリックされたら実行されます。
public void onClick(View view) {
if(view.getId()==mNo1)
{
setImage();//画像を表示
}
else //mNo2のケース
{
removeImage();//画像を消去
}
}
//画像を表示
private void setImage()
{
bitmap=BitmapFactory.decodeResource(getResources(), R.mipmap.icon_50);
//再度画像を設定したい場合
ImageView imageview=(ImageView)findViewById(mNo3);
imageview.setImageBitmap(bitmap);
}
//画像を消去
private void removeImage()
{
//画像を解放する
Resources res = getResources();
bitmap=BitmapFactory.decodeResource(res, R.mipmap.icon_50);
bitmap.recycle();
bitmap = null;
//ImageViewに設定されている画像を解除する
ImageView imageview=(ImageView)findViewById(mNo3);
imageview.setImageDrawable(null);
imageview.setImageBitmap(null);
//setBackgroundDrawable(android.graphics.drawable.Drawable) is deprecated
//This inspection reports where deprecated code is used in the specified inspection scope.
//imageview.setBackgroundDrawable(null);
}
//レイアウトを決定するオブジェクトを生成し渡します
public RelativeLayout.LayoutParams getLayoutObject(int width,int height)
{
return new RelativeLayout.LayoutParams(width, height);
}
}
|
ImageViewを設置します。
IDを取得します。
mNo3 = View.generateViewId();
ImageViewオブジェクトをインスタンス化します。
ImageView imageview=new ImageView(this);
IDを設定します。
imageview.setId(mNo3);
レイアウトにImageViewを追加します。
layout.addView(imageview, obj1);
画像を表示します。
setImage();
private void setImage()
{
ビットマップを取得します。
bitmap=BitmapFactory.decodeResource(getResources(), R.mipmap.icon_50);
レイアウトに設置したImageViewを指定します。
ImageView imageview=(ImageView)findViewById(mNo3);
再度画像を設定します。
imageview.setImageBitmap(bitmap);
}
画像を消去するときは画像の解放およびImageViewに設定した画像も解放します。
private void removeImage()
{
リソースを取得します。
Resources res = getResources();
画像を取得します。
bitmap=BitmapFactory.decodeResource(getResources(), R.mipmap.icon_50);
recycleとnullを設定することで画像を解放しています。
bitmap.recycle();
bitmap = null;
//ImageViewに設定されている画像を解除する
ImageView imageview=(ImageView)findViewById(mNo3);
imageview.setImageDrawable(null);
imageview.setImageBitmap(null);
//setBackgroundDrawable(android.graphics.drawable.Drawable) is deprecated
//This inspection reports where deprecated code is used in the specified inspection scope.
//imageview.setBackgroundDrawable(null);
}
実行結果
|
|