私は3つの変数(gyroXaxis、gyroYaxis、gyroZaxis)に基づいて2つの画像を1ミリ秒ごとに移動しようとしています(画像が常に動くようになります)。画像は画面の境界内に留まらなければならず、マトリックスの実装も同様に必要です。Android境界内で画像を移動する
私は ImageView Drag Limitation In Android 質問に従ってみましたが、設定が少し異なります。あなたのサンプルコードが与えられ
グローバル変数
ImageView imageView1;
ImageView imageView2;
// gyro float variables get updated every millisecond in a different function
float gyroXaxis;
float gyroYaxis;
float gyroZaxis;
private Matrix matrix = new Matrix();
private Matrix savedMatrix = new Matrix();
PointF DownPT = new PointF();
PointF StartPT = new PointF();
OnCreateの
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_version);
// Create images
imageView1 = (ImageView) findViewById(R.id.image1);
Drawable drawableImage1 = getDrawable(R.drawable.image1);
imageView1.setImageDrawable(drawableChromoX);
imageView2 = (ImageView) findViewById(R.id.image2);
Drawable drawableImage2 = getDrawable(R.drawable.image2);
imageView2.setImageDrawable(drawableChromoY);
View.OnTouchListener listener = new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getTag() != null && v.getTag().equals("image1")) {
int eid = event.getAction();
switch (eid) {
case MotionEvent.ACTION_MOVE:
PointF mv = new PointF(event.getX() - DownPT.x, event.getY() - DownPT.y);
imageView1.setX((int) (StartPT.x + mv.x));
imageView1.setY((int) (StartPT.y + mv.y));
StartPT = new PointF(imageView1.getX(), imageView1.getY());
break;
case MotionEvent.ACTION_DOWN:
DownPT.x = event.getX();
DownPT.y = event.getY();
StartPT = new PointF(imageView1.getX(), imageView1.getY());
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
}
else if (v.getTag() != null && v.getTag().equals("image2")) {
int eid = event.getAction();
switch (eid)
{
case MotionEvent.ACTION_MOVE :
PointF mv = new PointF(event.getX() - DownPT.x, event.getY() - DownPT.y);
imageView2.setX((int)(StartPT.x+mv.x));
imageView2.setY((int)(StartPT.y+mv.y));
StartPT = new PointF(imageView2.getX(), imageView2.getY());
break;
case MotionEvent.ACTION_DOWN :
DownPT.x = event.getX();
DownPT.y = event.getY();
StartPT = new PointF(imageView2.getX(), imageView2.getY());
break;
case MotionEvent.ACTION_UP :
break;
default :
break;
}
}
return true;
}
};
imageView1.setOnTouchListener(listener);
imageView2.setOnTouchListener(listener);
}
これに対してキャンバスを使用して推薦します。 –
@ Sub6Resourcesには例がありますか? – Pie
基本的にはキャンバスビューであるSurfaceViewに慣れるのに役立つ、主にゲーム向けのチュートリアルがいくつかあります。これは1つです:https://www.simplifiedcoding.net/android-game-development-tutorial-surface-view/ –