Android手势放大缩小组件
短信预约 -IT技能 免费直播动态提醒
每天学一点2020.4.22(Android-1)Android手势放大缩小组件1. 在Activity中使用2. 在Fragment中使用
Android手势放大缩小组件
作者:qq_42866851
这次是我第一次分享每天所学到的东西。今天所要分享的是在Android中实现对组件进行缩放(包括ImageView,TextView等组件)。实现该功能主要依靠ScaleGestureDetector类,该类主要是用于识别一些特定的手势,通过监听手势事件,从而进行相应的处理。下面就介绍具体如何使用。
1. 在Activity中使用 首先创建ScaleGestureDetector实例; private ScaleGestureDetector mScaleGestureDetector = null;
在onCreate方法中进行初始化,ScaleGestureDetector创建的时候需要两个参数。参数1:上下文对象,参数2:用于监听手势的类,该类实现ScaleGestureDetector.OnScaleGestureListener;
//初始化
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = View.inflate(this, R.layout.activity_main, null);
setContentView(view);
//这里的view是要设置缩放手势的组件
mScaleGestureDetector = new ScaleGestureDetector(this,new MyScaleGestureListener(view));
}
监听onTouchEvent事件,在Fragment中实现View时这里有些区别,下面会详细介绍到;
@Override
public boolean onTouchEvent(MotionEvent event) {
// 返回给ScaleGestureDetector来处理
return mScaleGestureDetector.onTouchEvent(event);
}
MyScaleGestureListener类创建,用于处理监听到的手势事件 ;
import android.util.Log;
import android.view.ScaleGestureDetector;
import android.view.View;
public class MyScaleGestureListener implements ScaleGestureDetector.OnScaleGestureListener {
private float scale;
private float preScale = 1;// 默认前一次缩放比例为1
private View view;
public ScaleGestureListener(View view) {
this.view = view;
}
@Override
public boolean onScale(ScaleGestureDetector detector) {
float previousSpan = detector.getPreviousSpan();
float currentSpan = detector.getCurrentSpan();
if (currentSpan < previousSpan) {
// 缩小
scale = preScale - (previousSpan - currentSpan) / 1000;
} else {
// 放大
scale = preScale + (currentSpan - previousSpan) / 1000;
}
// 缩放view
// scale表示缩放比,等于0时组件消失,为1时撑满父容器
if (scale = 1) {
scale = 1;
}
view.setScaleX(scale);
view.setScaleY(scale);
return false;
}
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
// 一定要返回true才会进入onScale()这个函数
return true;
}
@Override
public void onScaleEnd(ScaleGestureDetector detector) {
preScale = scale;//记录本次缩放比例
}
}
这样就能轻松的实现在Android中缩放组件。
2. 在Fragment中使用在Fragment中缩放组件与在Activity中实现唯一的区别是Fragment中无法使用onTouchEvent方法进行监听手势。解决方法是在Activity中添加回调接口。
首先创建一个监听的实例OnTouchLinsenter ; private OnTouchLinsenter onTouchLinsenter;
创建监听回调接口;
public interface OnTouchLinsenter {
boolean onTouch(MotionEvent event);
}
分别提供添加监听与销毁监听的方法;
public void registerOnTouch(OnTouchLinsenter onTouchLinsenter) {
this.onTouchLinsenter = onTouchLinsenter;
}
public void unRegisterOnTouch() {
this.onTouchLinsenter = null;
}
设置回调,触发时会将event回调给Fragment中;
@Override
public boolean onTouchEvent(MotionEvent event) {
// 返回给ScaleGestureDetector来处理
if(onTouchLinsenter != null) {
return onTouchLinsenter.onTouch(event);
}
return super.onTouchEvent(event);
}
在Fragment中创建OnTouchLinsenter;
private MainActivity.OnTouchLinsenter onTouchLinsenter;
初始化的时候设置监听;
mScaleGestureDetector = new MyScaleGestureDetector(getActivity(), new MyScaleGestureListener(view));
onTouchLinsenter = new MainActivity.OnTouchLinsenter(){
@Override
public boolean onTouch(MotionEvent event) {
return mScaleGestureDetector.onTouchEvent(event);
}
};
Fragment初始化的时候注册onTouchLinsenter监听;
((MainActivity)getActivity()).registerOnTouch(onTouchLinsenter);
Fragment中的onDestroy时候删除监听;
((MainActivity)getActivity()).registerOnTouch();
这样在Fragment中也能轻松实现缩放组件啦!希望所分享得能够帮到你们。
作者:qq_42866851
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341