android 触摸手指动作放大和缩小图片
16lz
2021-12-04
private RelativeLayout root;
private ImageView moveImage;
float lastDestance=-1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
root= (RelativeLayout) findViewById(R.id.Main_Activity);
moveImage = (ImageView) findViewById(R.id.moveImage);
root.setOnTouchListener(new View.OnTouchListener() { //侦听控件的触摸事件
@Override
public boolean onTouch(View v, MotionEvent event) {
float currentDestance;
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN ://监听点击一个点
System.out.println("按下");
break;
case MotionEvent.ACTION_MOVE ://触摸移动 手指移动时
if (event.getPointerCount()>=2)
{
float offSetX =event.getX(0)-event.getX(1);//获取
float offSetY =event.getY(0)-event.getY(1 );
currentDestance = (float) Math.sqrt(offSetX*offSetX+offSetY*offSetY);//获取两点间距离 然后运用勾股定理 算出两个手指点之间的距离
System.out.println(lastDestance);
if (lastDestance<0) {
System.out.println("初始化变量");
System.out.println(currentDestance);
lastDestance= (float)currentDestance;//将第一次获取的两点距离 复制给lastDestance
System.out.println(lastDestance);
}
else {
System.out.println("进入手指动作判断");
if (currentDestance-lastDestance>5)
{
System.out.println("手势 放大");
RelativeLayout.LayoutParams lv= (RelativeLayout.LayoutParams) moveImage.getLayoutParams();
lv.width = (int) (1.1f*moveImage.getWidth());//每一次两点间的距离放大 将图片的高和宽 分别*1.1 不停的放大
lv.height = (int) (1.1f*moveImage.getHeight());
moveImage.setLayoutParams(lv);//将每次放大的距离复制个image的高和宽
lastDestance =currentDestance;//将这一次的两点间距离赋值给lastDestance 以便每次比较
}
else if (lastDestance-currentDestance>5){
System.out.println("手势 缩小");
RelativeLayout.LayoutParams lv= (RelativeLayout.LayoutParams) moveImage.getLayoutParams();
lv.width = (int) (0.9f*moveImage.getWidth());//当两点间的距离在不断的缩小时
lv.height = (int) (0.9f*moveImage.getHeight());
moveImage.setLayoutParams(lv);
lastDestance =currentDestance;
}
}
}
break;
case MotionEvent.ACTION_UP ://手指离开屏幕事件
System.out.println("弹起");
break;
default:
System.out.println("无");
break;
}
return true;
}
});
}
private ImageView moveImage;
float lastDestance=-1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
root= (RelativeLayout) findViewById(R.id.Main_Activity);
moveImage = (ImageView) findViewById(R.id.moveImage);
root.setOnTouchListener(new View.OnTouchListener() { //侦听控件的触摸事件
@Override
public boolean onTouch(View v, MotionEvent event) {
float currentDestance;
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN ://监听点击一个点
System.out.println("按下");
break;
case MotionEvent.ACTION_MOVE ://触摸移动 手指移动时
if (event.getPointerCount()>=2)
{
float offSetX =event.getX(0)-event.getX(1);//获取
float offSetY =event.getY(0)-event.getY(1 );
currentDestance = (float) Math.sqrt(offSetX*offSetX+offSetY*offSetY);//获取两点间距离 然后运用勾股定理 算出两个手指点之间的距离
System.out.println(lastDestance);
if (lastDestance<0) {
System.out.println("初始化变量");
System.out.println(currentDestance);
lastDestance= (float)currentDestance;//将第一次获取的两点距离 复制给lastDestance
System.out.println(lastDestance);
}
else {
System.out.println("进入手指动作判断");
if (currentDestance-lastDestance>5)
{
System.out.println("手势 放大");
RelativeLayout.LayoutParams lv= (RelativeLayout.LayoutParams) moveImage.getLayoutParams();
lv.width = (int) (1.1f*moveImage.getWidth());//每一次两点间的距离放大 将图片的高和宽 分别*1.1 不停的放大
lv.height = (int) (1.1f*moveImage.getHeight());
moveImage.setLayoutParams(lv);//将每次放大的距离复制个image的高和宽
lastDestance =currentDestance;//将这一次的两点间距离赋值给lastDestance 以便每次比较
}
else if (lastDestance-currentDestance>5){
System.out.println("手势 缩小");
RelativeLayout.LayoutParams lv= (RelativeLayout.LayoutParams) moveImage.getLayoutParams();
lv.width = (int) (0.9f*moveImage.getWidth());//当两点间的距离在不断的缩小时
lv.height = (int) (0.9f*moveImage.getHeight());
moveImage.setLayoutParams(lv);
lastDestance =currentDestance;
}
}
}
break;
case MotionEvent.ACTION_UP ://手指离开屏幕事件
System.out.println("弹起");
break;
default:
System.out.println("无");
break;
}
return true;
}
});
}
更多相关文章
- Android(安卓)textView字间距自定义LetterSpacingTextView
- 相对布局RelativeLayout的妙用:提示标签在输入框内
- android布局属性之margin
- android多点触摸缩放图片
- Android实现图片放大缩小
- 关于相对布局RelativeLayout的各种属性
- 关于相对布局RelativeLayout的各种属性介绍
- Android设置TextView行间距(非行高)
- android 图片 上下左右滑动,能放大放小