側滑選單(一) 帶縮放動畫

2021-07-25 04:51:32 字數 3786 閱讀 7021

* 建立自定義控制項

*/public class draglayout extends framelayout

public draglayout(context context, attributeset attrs)

public draglayout(context context, attributeset attrs, int defstyleattr)

/*** 初始化控制項

*/private void init()

}

<?xml version="1.0" encoding="utf-8"?>

<?xml version="1.0" encoding="utf-8"?>

<?xml version="1.0" encoding="utf-8"?>

android:allowbackup="true"

android:icon="@mipmap/ic_launcher"

android:supportsrtl="true"

/**

* created by administrator on 2016/x/xx.

* 建立自定義控制項

*/public class draglayout extends framelayout

/*** 初始化控制項

* google i/o viewdraghelper封裝了觸控,滑動等操作,可以輕鬆的控制項觸控滑動

*/private void init()

/*** 新建乙個callback

*/private viewdraghelper.callback callback = new viewdraghelper.callback()

/*** 處理水平移動

* @param child 被觸控的孩子

* @param left oldleft + dx = newleft

* @param dx 系統每隔一段時間檢測手指移動的距離

* @return

*/@override

public int clampviewpositionhorizontal(view child, int left, int dx)

/*** 處理垂直移動

* @param child

* @param top

* @param dy

* @return

*/// @override

// public int clampviewpositionvertical(view child, int top, int dy)

};/**

* 讓helper接手觸控事件的處理

* @param event

* @return 必須返回true才能處理

*/@override

public boolean ontouchevent(motionevent event)

@override

public boolean onintercepttouchevent(motionevent ev)

}

/*自定義控制項的4個基本流程

* 1,載入

* 2,測量

* 3,布局

* 4,繪製

* */

/*** 在當前控制項及其子控制項全部載入完畢時,呼叫此方法

*/@override

protected void onfinishinflate()

//必須包含viewgroup

if(!(getchildat(0) instanceof viewgroup) || !(getchildat(1) instanceof viewgroup))

menu = getchildat(0);

main = getchildat(1);

}

/**

* 在onmeasure()方法執行後執行,可以獲得測量結果

* @param w

* @param h

* @param oldw

* @param oldh

*/@override

protected void onsizechanged(int w, int h, int oldw, int oldh)

/**

* 新建乙個callback

*/private viewdraghelper.callback callback = new viewdraghelper.callback() else if(left > maxdragrange)

}return left;

}...

};

/**

* created by administrator on 2016/9/30.

* 建立自定義控制項

*/public class draglayout extends framelayout else if(newleft < 0)

int newdx = newleft - oldleft;

main.offsetleftandright(newdx);}}

...};

...}

public class draglayout extends framelayout  else 

}...

};/**

* 開啟側滑選單

*/private void open()

}/**

* 計算滾動過程中的某幀

*/@override

public void computescroll()

}/**'

* 關閉側滑選單

*/private void close()

}...

}

...

public class draglayout extends framelayout

//計算移動的距離佔總距離的百分比

float percent = main.getleft() * 1.0f / maxdragrange;

executeanimation(percent);

}...

};/**

* 執行移動時main的縮放動畫

* @param percent

*/private void executeanimation(float percent)

private float evaluate(float fraction, float startvalue, float endvalue)

...}

小程式寫乙個側滑選單

基本思路 上下兩層div,寬高等於page的寬高,通過定位設定層級,讓上一層div定位在外層。拖動上一層時,動態改變上一層div的translatex的值。這樣下層的div就出現了。html view class page view class upper bindtouchstart start ...