移动和缩放米老鼠
实现步骤
(一)移动米老鼠
1、创建安卓应用【MoveMickeyByTouch】
![在这里插入图片描述](https://img-blog.csdnimg.cn/fe2e3ab441344d1c9304345e088ca0e4.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/6aeac6c6077240728c245cb9705edb80.png)
2、准备背景图片与米老鼠图片,拷贝到drawable目录里
![在这里插入图片描述](https://img-blog.csdnimg.cn/c68fd44ff5174c1d984b00de2e0d224f.png)
3、修改字符串文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/4b52be8ff7de41c8b13e44d01fe09865.png)
4、布局资源文件activity_main.xml
![在这里插入图片描述](https://img-blog.csdnimg.cn/8a37eac75c3f4d77af17291ec87eed66.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2c0e26a97f44b918514cbb78d1d94b7.png)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/yjn"
android:orientation="vertical"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv_Mickey"
android:layout_width="100dp"
android:layout_height="120dp"
android:scaleType="fitXY"
android:src="@drawable/mickey" />
</LinearLayout>
5、主界面类MainActivity
![在这里插入图片描述](https://img-blog.csdnimg.cn/a487b30478b24672b4395157fc8c8b59.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/045a03eeee8a4891a45bab656bd1effe.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/6f323531e1e84363977084b6b38f9842.png)
root.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.d(TAG, "ACTION_DOWN(" + event.getX() + ", " + event.getY() + ")");
break;
case MotionEvent.ACTION_MOVE:
Log.d(TAG, "ACTION_MOVE(" + event.getX() + ", " + event.getY() + ")");
break;
case MotionEvent.ACTION_UP:
Log.d(TAG, "ACTION_UP(" + event.getX() + ", " + event.getY() + ")");
break;
}
LayoutParams.leftMargin = (int) event.getX();
LayoutParams.topMargin = (int) event.getY();
ivMickey.setLayoutParams(LayoutParams);
return true;
}
});
}
}
6、启动应用,查看效果
- 在模拟器屏幕上,按下鼠标,移动鼠标,放开鼠标,之后在LogCat里可以看到上述三种动作的位置坐标。
![在这里插入图片描述](https://img-blog.csdnimg.cn/db628c55c7bb41ed80b0577dc220b3f3.png)
- 按下鼠标移动米老鼠会发现鼠标在米老鼠左上角,会有不好的体验,将鼠标放在米老鼠中间移动
![在这里插入图片描述](https://img-blog.csdnimg.cn/f0a63c31ec124c55822d477bb0e0c92d.png)
LayoutParams.leftMargin = (int) event.getX()-ivMickey.getWidth()/2;
LayoutParams.topMargin = (int) event.getY()-ivMickey.getHeight()/2;
(二)缩放米老鼠
1、创建安卓应用【ZoomMickeyByTouch】
![在这里插入图片描述](https://img-blog.csdnimg.cn/7cb41521944b4b14ad4543317ee40c6f.png)
2、准备背景图片与米老鼠图片,拷贝到drawable目录里
![在这里插入图片描述](https://img-blog.csdnimg.cn/321619d4a5494c30b1a3da456f8d713b.png)
3、主布局资源文件activity_main.xml
![在这里插入图片描述](https://img-blog.csdnimg.cn/49e5b3668c3c4f8eb5588517b962948b.png)
4、主界面类MainActivity
![在这里插入图片描述](https://img-blog.csdnimg.cn/7614842b7108470e929ccf2551e6772f.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9280f7fdf4f54ee98a648554ca306d9a.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/ad85637f18b5427b831bc6b836c579e4.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b12c490ec8314ddeabe27f61f70de465.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0b17fa04f02e43b8a7747e45c0b433a1.png)
package dirnet.zh.zoommickeybytouch;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
private LinearLayout root;
private ImageView ivMickey;
private float x1,y1;
private float x2,y2;
private float nextX1,nextY1;
private float nextX2,nextY2;
private float distance;
private float nextDistance;
private LinearLayout.LayoutParams layoutParams;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
root = findViewById(R.id.root);
ivMickey = findViewById(R.id.iv_Mickey);
root.setFocusable(true);
root.requestFocus();
layoutParams = (LinearLayout.LayoutParams) ivMickey.getLayoutParams();
root.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getPointerCount() == 1){
if (event.getAction() == MotionEvent.ACTION_MOVE){
layoutParams.leftMargin = (int) (event.getX()-ivMickey.getWidth()/2);
layoutParams.topMargin = (int) (event.getY()-ivMickey.getHeight()/2);
}
}else if (event.getPointerCount() == 2) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN://触点按下
x1 = event.getX(0);
y1 = event.getY(0);
x2 = event.getX(1);
y2 = event.getY(1);
distance = (float) Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
break;
case MotionEvent.ACTION_MOVE://触点移动
nextX1 = event.getX(0);
nextY1 = event.getY(0);
nextX2 = event.getX(1);
nextY2 = event.getY(1);
nextDistance = (float) Math.sqrt((nextX1 - nextX2) * (nextX1 - nextX2) + (nextY1 - nextY2) * (nextY1 - nextY2));
break;
case MotionEvent.ACTION_UP://触点放开
break;
}
if (nextDistance > distance) {
if (layoutParams.width < 1500) {
layoutParams.width = (int) (layoutParams.width * 1.05);
layoutParams.height = (int) (layoutParams.height * 1.05);
}
} else {
if (layoutParams.width > 100) {
layoutParams.width = (int) (layoutParams.width / 1.05);
layoutParams.height = (int) (layoutParams.height / 1.05);
}
}
x1 = nextX1;
y1 = nextY1;
x2 = nextX2;
y2 = nextY2;
distance = (float) Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
ivMickey.setLayoutParams(layoutParams);
return true;
}
});
}
}
5、运行程序,查看结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/0cddb87a651047aaba5edc1beff06679.png)
6、Android studio项目在手机上运行
- 打开Android项目,在工具栏中找到Build->Build APK(s)
![在这里插入图片描述](https://img-blog.csdnimg.cn/08086a9f67154e9d9bb88e6b4bf36753.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/ec2622dbc8464d99863018b060791d2c.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b21ff91a3d5545789b8311cb8667b98f.png)