ImageViewを使用した画像の拡縮
このサンプルでは「icon.png」画像ファイルを使用しています。
画像ファイルを右クリックでコピーを選択した状態でmipmapにPasteしています。
package test.example.com.test44;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
//相対的レイアウト(RelativeLayout)を使用する宣言
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
//TextViewを使用する宣言
import android.widget.TextView;
//クリックイベント用に追加
import android.view.View.OnClickListener;
//ボタンを宣言
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements OnClickListener {
//setId用の管理番号
private int mNo2;
private int mNo1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getSupportActionBar().hide();
//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=100;
y=50;
width=300;
height=60;
RelativeLayout.LayoutParams obj1 = null;
obj1=getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
//ボタンの設置
Button btn1=new Button(this);
mNo1 = View.generateViewId();
btn1.setId(mNo1);
btn1.setOnClickListener(this);
btn1.setText("拡縮");
layout.addView(btn1,obj1);
btn1=null;
y+=height+10;
//画像を設置
height=50;
width=50;
obj1 = getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
//画像を準備
Bitmap bitmap= BitmapFactory.decodeResource(getResources(), R.mipmap.icon);
//ImageViewを設置し画像を設定します
ImageView imageView=new ImageView(this);
imageView.setId(mNo2);
imageView.setImageBitmap(bitmap);
//Tagを画像の拡縮制御に使用しています
imageView.setTag(0);//小さい状態
layout.addView(imageView,obj1);
imageView=null;
}
@Override
//ボタンがクリックされたら実行されます。
public void onClick(View view) {
if(mNo1==view.getId())
{
//iSize:画像の表示状態
//0 : 現在の状態が小さい画像として表示されている
//1 : 現在の状態が大きい画像として表示されている
int iSize = 0;
int iWidthHeight=0;
//ボタンがタップされたケース
ImageView imageView = (ImageView)findViewById(mNo2);
iSize=(int)imageView.getTag();
//小さい画像から大きい画像に拡大します
if(iSize==0)
{
iSize=1;
iWidthHeight=200;
}
//大きい画像から小さい画像に縮小します
else
{
iSize=0;
iWidthHeight=50;
}
//ImageViewを幅を制御する
//拡縮のプロパティ(setAdjustViewBounds)の値もtrueにする
imageView.setMaxHeight(iWidthHeight);
imageView.setMinimumHeight(iWidthHeight);
imageView.setMaxWidth(iWidthHeight);
imageView.setMinimumWidth(iWidthHeight);
imageView.getLayoutParams().width=iWidthHeight;
imageView.getLayoutParams().height=iWidthHeight;
imageView.setAdjustViewBounds(true);
//次のボタンをタップした動作のため現在の状態をTagに保存しておく
imageView.setTag(iSize);
}
}
//レイアウトを決定するオブジェクトを生成し渡します
private RelativeLayout.LayoutParams getLayoutObject(int width,int height)
{
return new RelativeLayout.LayoutParams(width, height);
}
}
|
「mNo2 = View.generateViewId();」をImageViewを設置する前に実行してください。
※なくても動いたのですが(偶然、未登録の0の値を使ってくれたようで)、よくないので。
画像の拡大縮小をするため次の設定をImageViewオブジェクトに設定しています。
項目 | 内容 | setMaxHeight(iWidthHeight); | 高さの最大を設定します。 | setMinimumHeight(iWidthHeight); | 高さの最小を設定します。 | setMaxWidth(iWidthHeight); | 幅の最大を設定します。 | setMinimumWidth(iWidthHeight); | 幅の最小を設定します。 | getLayoutParams().width=iWidthHeight; | レイアウトの幅を設定します。 | getLayoutParams().height=iWidthHeight; | レイアウトの高さを設定します。 | setAdjustViewBounds(true); | 描画調整をtrueにします。 |
また、プログラム上からも、わかると思いますが、Tagをフラグとして使用しています。
別に変数に使用と別なものとしても問題はないです。
実行結果
ボタンを押すたびに画像の大きさが切り替わります。
|
|