* 建立自定義控制項
*/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 ...