我试图在基于3个变量(gyroxaxis,gyroYaxis,gyroZaxis)更新每毫秒(因此图像将不断移动)的活动中移动两个图像。图像必须保持在屏幕的边界内,因此还需要执行矩阵。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,它本质上是一个画布视图。这里是一个:https://www.simplifiedcoding.net/android-game-development-tutorial-surface-view/ –