画像を移動
ImageViewを使って移動させたサンプルです。
package test.example.com.test47;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
//相対的レイアウト(RelativeLayout)を使用する宣言
import android.view.View;
//クリックイベント用に追加
import android.view.View.OnClickListener;
//ボタンを宣言
import android.widget.Button;
//ログ出力の宣言
import android.util.Log;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Handler;
//import java.util.logging.Handler;
public class MainActivity extends AppCompatActivity implements OnClickListener {
private int mNo1=0;//TextView
private int mNo2=0;//Button(Start)
private int mNo3=0;//ImageView
private int mCount=0;
private Timer mTimer;
private clsTimerTask objTimer;
private Handler mHandler=new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//相対座標を設定できるようにレイアウトを設定
RelativeLayout layout = new RelativeLayout(this);
setContentView(layout);
//Idを取得する
mNo1 = View.generateViewId();
mNo2 = View.generateViewId();
mNo3 = View.generateViewId();
//座標の初期設定
int x = 0;
int y = 0;
int width = 0;
int height = 0;
x = 50;
y = 50;
width = 400;
height = 60;
RelativeLayout.LayoutParams obj = getLayoutObject(width, height);
obj.leftMargin=x;
obj.topMargin=y;
TextView txt = new TextView(this);
txt.setId(mNo1);
txt.setText("");
txt.setTextSize(20.0f);
txt.setBackgroundColor(Color.argb(70, 208, 208, 255));
txt.setTextColor(Color.BLACK);
layout.addView(txt, obj);
y += height + 10;
width = 200;
obj = getLayoutObject(width, height);
obj.leftMargin=x;
obj.topMargin=y;
Button btn1=new Button(this);
btn1.setId(mNo2);
//setOnClickListenerはimplements OnClickListenerが必要です
btn1.setOnClickListener(this);
btn1.setBackgroundColor(Color.GRAY);
btn1.setTag(1);
btn1.setText("移動開始");
layout.addView(btn1, obj);
y += height + 10;
//画像を準備
width=height=60;
Bitmap bitmap= BitmapFactory.decodeResource(getResources(), R.mipmap.icon);
//ImageViewを設置し画像を設定します
obj = getLayoutObject(width, height);
obj.leftMargin=x;
obj.topMargin=y;
ImageView imageView=new ImageView(this);
imageView.setId(mNo3);
imageView.setImageBitmap(bitmap);
//Tagを画像の拡縮制御に使用しています
imageView.setTag(0);//小さい状態
layout.addView(imageView,obj);
imageView=null;
}
@Override
//ボタンがクリックされたら実行されます。
public void onClick(View view) {
int iId=0;
iId=view.getId();
Log.d("view.getId()",String.valueOf(iId));
if(iId==mNo2)
{
mTimer=new Timer();
objTimer=new clsTimerTask();
mTimer.schedule(objTimer,0,10);
}
}
//レイアウトを決定するオブジェクトを生成し渡します
private RelativeLayout.LayoutParams getLayoutObject(int width,int height)
{
return new RelativeLayout.LayoutParams(width, height);
}
class clsTimerTask extends TimerTask
{
@Override
public void run()
{
mHandler.post(new Runnable()
{
public void run()
{
if(mCount<301)
{
float fPosition=0.0f;
ImageView imageView=(ImageView)findViewById(mNo3);
imageView.setX(imageView.getX()+1.0f);
}
else
{
mTimer.cancel();
TextView txt=(TextView)findViewById(mNo1);
txt.setText("移動しました。 mCount : " + String.valueOf(mCount));
mCount=0;
return;
}
mCount++;
}
});
}
}
}
|
タイマーと並行して画像を移動させているサンプルです。
タイマーで実行された時間だけRunnable内のメソッドが実行されています。
実行するとImageViewオブジェクトのx座標を移動として使用しています。
実行結果
左側が実行前で、右側が実行後となります。
結果を見ていただくとわかるように画像が右方向に移動しています。
|
|