这篇文章主要为大家详细介绍了Android自定义View实现自动吸附功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了Android实现自动吸附功能的具体代码,供大家参考,具体内容如下
1.简述
最近开发app过程中要实现拖动view后要可以自动吸附功能,所以需要自定义view来在onTouchEvent中来利用动画来实现此功能
2.功能代码部分
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
public class AdsorbentViews extends ImageView {
private int maxWidth;
private int maxHeight;
private int viewWidth;
private int viewHeight;
private float downx;
private float downy;
private Context mContext;
public CustomViews(Context context) {
this(context, null);
}
public CustomViews(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CustomViews(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
DisplayMetrics outMetrics = new DisplayMetrics();
WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getRealMetrics(outMetrics);
//屏幕的宽度
maxWidth = outMetrics.widthPixels;
//屏幕的高度
maxHeight = outMetrics.heightPixels;
/**
* 控件的宽高
*/
viewWidth = canvas.getWidth();
viewHeight = canvas.getHeight();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
clearAnimation();
downx = event.getX();
downy = event.getY();
return true;
case MotionEvent.ACTION_MOVE:
float moveX = event.getRawX() - downx;
float moveY = event.getRawY() - downy;
moveX = moveX < 0 ? 0 : (moveX + viewWidth > maxWidth) ? (maxWidth - viewWidth) : moveX;
moveY = moveY < 0 ? 0 : (moveY + viewHeight) > maxHeight ? (maxHeight - viewHeight) : moveY;
this.setY(moveY);
this.setX(moveX);
return true;
case MotionEvent.ACTION_UP:
//做吸附效果
float centerX = getX() + viewWidth / 2;
if (centerX > maxWidth/2){
//靠右吸附
animate().setInterpolator(new DecelerateInterpolator())
.setDuration(500)
.x(maxWidth-viewWidth)
.y(maxHeight-viewHeight)
.start();
}else {
animate().setInterpolator(new DecelerateInterpolator())
.setDuration(500)
.x(0)
.y(maxHeight-viewHeight)
.start();
}
return true;
default:
return super.onTouchEvent(event);
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程学习网。
织梦狗教程
本文标题为:Android自定义View实现自动吸附功能
基础教程推荐
猜你喜欢
- android studio按钮监听的5种方法实例详解 2023-01-12
- Flutter手势密码的实现示例(附demo) 2023-04-11
- 解决Android Studio突然不显示logcat日志的问题 2023-02-04
- IOS应用内跳转系统设置相关界面的方法 2022-11-20
- IOS 播放系统提示音使用总结(AudioToolbox) 2023-03-01
- Flutter绘图组件之CustomPaint使用详解 2023-05-12
- iOS开发教程之XLForm的基本使用方法 2023-05-01
- Android多返回栈技术 2023-04-15
- Android中的webview监听每次URL变化实例 2023-01-23
- Android开发使用RecyclerView添加点击事件实例详解 2023-06-15
