Android自定義View實現(xiàn)自動吸附功能
本文實例為大家分享了Android實現(xiàn)自動吸附功能的具體代碼,供大家參考,具體內(nèi)容如下
1.簡述
最近開發(fā)app過程中要實現(xiàn)拖動view后要可以自動吸附功能,所以需要自定義view來在onTouchEvent中來利用動畫來實現(xiàn)此功能
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);
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Flutter 使用cached_image_network優(yōu)化圖片加載體驗
在 Flutter 中,cached_image_network 即提供了緩存網(wǎng)絡(luò)圖片功能,同時還提供了豐富的加載過程指示。本文就來看下cached_image_network的具體使用2021-05-05
android實現(xiàn)手機(jī)App實現(xiàn)拍照功能示例
本篇文章主要介紹了android實現(xiàn)手機(jī)App實現(xiàn)拍照功能示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
舉例講解Android應(yīng)用中SimpleAdapter簡單適配器的使用
這篇文章主要介紹了Android應(yīng)用中SimpleAdapter簡單適配器的使用例子,SimpleAdapter經(jīng)常在ListView被使用,需要的朋友可以參考下2016-04-04
kotlin android extensions 插件實現(xiàn)示例詳解
這篇文章主要為大家介紹了kotlin android extensions 插件實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Android仿餓了么加入購物車旋轉(zhuǎn)控件自帶閃轉(zhuǎn)騰挪動畫的按鈕效果(實例詳解)
這篇文章主要介紹了Android仿餓了么加入購物車旋轉(zhuǎn)控件自帶閃轉(zhuǎn)騰挪動畫的按鈕效果(實例詳解)的相關(guān)資料,需要的朋友可以參考下2017-01-01

