android滑屏切换界面
实现思路,刚开端的时辰我是用ViewFlipper控件来做很是的简单然则实现不了拖拽移动屏幕的结果,终极放弃决意自定义一个控件实现如许结果。接下来我具体的申明注解一下我开辟时写的这个实验demo,软件顶用的滑屏就是由如许的代码实现的。
起首新建一个控件类TouchPageView并且持续自ViewGroup,阁下滑动换屏我的实现是在TouchPageView添加3个子view分别代表看不到的左边屏幕、可以看到的中心屏幕、看不到的右边屏幕,如许在滑屏时辰就可以经由过程络续调剂这3个view的地位实现连气儿不中断滑屏换屏,下面的实验中我分别把3个view设置成红色、绿色、黄色如许切换的时辰可以看到明显结果,这3个view在TouchPageView的机关办法中调用init办法进行初始化:
private void init()
{
views= new ArrayList<LinearLayout>();
view1=new LinearLayout(context);
view1.setBackgroundColor(Color.YELLOW);
this.addView(view1);
TextView tv=new TextView(context);
tv.setText("测试");
view1.addView(tv);
views.add(view1);
view2=new LinearLayout(context);
view2.setBackgroundColor(Color.RED);
this.addView(view2);
views.add(view2);
view3=new LinearLayout(context);
view3.setBackgroundColor(Color.GREEN);
this.addView(view3);
views.add(view3);
final ViewConfiguration configuration = ViewConfiguration.get(getContext());
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
}
接下来的实现是关键,重写onLayout办法对3个view的显示地位布局进行把握,经由过程下面的这个办法,把3个view进行程度一个跟着一个进行布局显示。
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int childLeft = -1;
final int count = views.size();
//程度从左到右放置
for (int i = 0; i < count; i++) {
final View child =views.get(i);
if (child.getVisibility() != View.GONE) {
final int childchildWidth = child.getMeasuredWidth();
if(childLeft==-1)
{
childLeft=-childWidth;
}
child.layout(childLeft, 0, childLeft + childWidth, child.getMeasuredHeight());
childLeft += childWidth;
}
}
}
3个view地位放置好之后,接下来的实实际现手指在屏幕拖拽滑动时让3个view跟着手指的地位进行变更显示,这个必然是在onTouchEvent办法中实现了,分别在MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP三个手指状况中进行把握,鄙人面的实现中还采取了VelocityTracker的办法敌手指的滑动速度进行跟踪,如许按照滑动速度决意屏幕往哪个标的目标换屏,关键的代码如下:
@Override
public boolean onTouchEvent(MotionEvent ev){
if(!lock)
{
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
mVelocityTracker.addMovement(ev);
final int action = ev.getAction();
final float x = ev.getX();
final float y = ev.getY();
switch (action) {
case MotionEvent.ACTION_DOWN://按下去
if(touchState==TOUCH_STATE_REST)
{
//记录按下去的的x坐标
lastMotionX = x;
touchState=TOUCH_STATE_MOVING;
isMoved=false;
}
break;
 
补充:移动开发 , Android ,