




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么实现滑动分页功能
这篇文章给大家介绍Android中怎么实现滑动分页功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java代码:package
cn.anycall.ju;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
import
android.app.Activity;
import
android.content.ActivityNotFoundException;
import
android.content.Context;
import
android.content.Intent;
import
android.content.pm.ResolveInfo;
import
android.os.Bundle;
import
android.os.Handler;
import
android.os.Looper;
import
android.os.Message;
import
android.view.KeyEvent;
import
android.view.View;
import
android.view.Window;
import
android.widget.AdapterView;
import
android.widget.AdapterView.OnItemClickListener;
import
android.widget.GridView;
import
android.widget.Toast;
import
cn.anycall.ju.ScrollLayout.OnScreenChangeListenerDataLoad;
/**
*
GridView分页显示安装的应用程序
*/
public
class
AllAppList
extends
Activity
{
private
ScrollLayout
mScrollLayout;
private
static
final
float
APP_PAGE_SIZE
=
4.0f;
private
Context
mContext;
private
PageControlView
pageControl;
public
MyHandler
myHandler;
public
int
n=0;
private
DataLoading
dataLoad;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
//
TODO
Auto-generated
method
stub
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
mContext
=
this;
setContentView(R.layout.main);
dataLoad
=
new
DataLoading();
mScrollLayout
=
(ScrollLayout)findViewById(R.id.ScrollLayoutTest);
myHandler
=
new
MyHandler(this,1);
//起一个线程更新数据
MyThread
m
=
new
MyThread();
new
Thread(m).start();
}
/**
*
gridView
的onItemLick响应事件
*/
public
OnItemClickListener
listener
=
new
OnItemClickListener()
{
public
void
onItemClick(AdapterView<?>
parent,
View
view,
int
position,
long
id)
{
//
TODO
Auto-generated
method
stub
System.out.println("position="+position);
}
};
@Override
protected
void
onDestroy()
{
//
TODO
Auto-generated
method
stub
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
}
@Override
public
boolean
onKeyDown(int
keyCode,
KeyEvent
event)
{
//
TODO
Auto-generated
method
stub
if
(keyCode
==
KeyEvent.KEYCODE_BACK)
{
finish();
return
true;
}
return
super.onKeyDown(keyCode,
event);
}
//
更新后台数据
class
MyThread
implements
Runnable
{
public
void
run()
{
try
{
Thread.sleep(1000*3);
}
catch
(InterruptedException
e)
{
//
TODO
Auto-generated
catch
block
e.printStackTrace();
}
String
msglist
=
"1";
Message
msg
=
new
Message();
Bundle
b
=
new
Bundle();//
存放数据
b.putString("rmsg",
msglist);
msg.setData(b);
AllAppList.this.myHandler.sendMessage(msg);
//
向Handler发送消息,更新UI
}
}
class
MyHandler
extends
Handler
{
private
AllAppList
mContext;
public
MyHandler(Context
conn,int
a)
{
mContext
=
(AllAppList)conn;
}
public
MyHandler(Looper
L)
{
super(L);
}
//
子类必须重写此方法,接受数据
@Override
public
void
handleMessage(Message
msg)
{
//
TODO
Auto-generated
method
stub
super.handleMessage(msg);
Bundle
b
=
msg.getData();
String
rmsg
=
b.getString("rmsg");
if
("1".equals(rmsg))
{
//
do
nothing
List<Map>
list
=
new
ArrayList<Map>();
for(int
i
=0;i<16;i++){
n++;
Map
map
=
new
HashMap();
map.put("name",
n);
list.add(map);
}
int
pageNo
=
(int)Math.ceil(
list.size()/APP_PAGE_SIZE);
for
(int
i
=
0;
i
<
pageNo;
i++)
{
GridView
appPage
=
new
GridView(mContext);
//
get
the
"i"
page
data
appPage.setAdapter(new
AppAdapter(mContext,
list,
i));
appPage.setNumColumns(2);
appPage.setOnItemClickListener(listener);
mScrollLayout.addView(appPage);
}
//加载分页
pageControl
=
(PageControlView)
findViewById(R.id.pageControl);
pageControl.bindScrollViewGroup(mScrollLayout);
//加载分页数据
dataLoad.bindScrollViewGroup(mScrollLayout);
}
}
}
//分页数据
class
DataLoading
{
private
int
count;
public
void
bindScrollViewGroup(ScrollLayout
scrollViewGroup)
{
this.count=scrollViewGroup.getChildCount();
scrollViewGroup.setOnScreenChangeListenerDataLoad(new
OnScreenChangeListenerDataLoad()
{
public
void
onScreenChange(int
currentIndex)
{
//
TODO
Auto-generated
method
stub
generatePageControl(currentIndex);
}
});
}
private
void
generatePageControl(int
currentIndex){
//如果到最后一页,就加载16条记录
if(count==currentIndex+1){
MyThread
m
=
new
MyThread();
new
Thread(m).start();
}
}
}
}Java代码:package
cn.anycall.ju;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
import
android.app.Activity;
import
android.content.ActivityNotFoundException;
import
android.content.Context;
import
android.content.Intent;
import
android.content.pm.ResolveInfo;
import
android.os.Bundle;
import
android.os.Handler;
import
android.os.Looper;
import
android.os.Message;
import
android.view.KeyEvent;
import
android.view.View;
import
android.view.Window;
import
android.widget.AdapterView;
import
android.widget.AdapterView.OnItemClickListener;
import
android.widget.GridView;
import
android.widget.Toast;
import
cn.anycall.ju.ScrollLayout.OnScreenChangeListenerDataLoad;
/**
*
GridView分页显示安装的应用程序
*/
public
class
AllAppList
extends
Activity
{
private
ScrollLayout
mScrollLayout;
private
static
final
float
APP_PAGE_SIZE
=
4.0f;
private
Context
mContext;
private
PageControlView
pageControl;
public
MyHandler
myHandler;
public
int
n=0;
private
DataLoading
dataLoad;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
//
TODO
Auto-generated
method
stub
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
mContext
=
this;
setContentView(R.layout.main);
dataLoad
=
new
DataLoading();
mScrollLayout
=
(ScrollLayout)findViewById(R.id.ScrollLayoutTest);
myHandler
=
new
MyHandler(this,1);
//起一个线程更新数据
MyThread
m
=
new
MyThread();
new
Thread(m).start();
}
/**
*
gridView
的onItemLick响应事件
*/
public
OnItemClickListener
listener
=
new
OnItemClickListener()
{
public
void
onItemClick(AdapterView<?>
parent,
View
view,
int
position,
long
id)
{
//
TODO
Auto-generated
method
stub
System.out.println("position="+position);
}
};
@Override
protected
void
onDestroy()
{
//
TODO
Auto-generated
method
stub
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
}
@Override
public
boolean
onKeyDown(int
keyCode,
KeyEvent
event)
{
//
TODO
Auto-generated
method
stub
if
(keyCode
==
KeyEvent.KEYCODE_BACK)
{
finish();
return
true;
}
return
super.onKeyDown(keyCode,
event);
}
//
更新后台数据
class
MyThread
implements
Runnable
{
public
void
run()
{
try
{
Thread.sleep(1000*3);
}
catch
(InterruptedException
e)
{
//
TODO
Auto-generated
catch
block
e.printStackTrace();
}
String
msglist
=
"1";
Message
msg
=
new
Message();
Bundle
b
=
new
Bundle();//
存放数据
b.putString("rmsg",
msglist);
msg.setData(b);
AllAppList.this.myHandler.sendMessage(msg);
//
向Handler发送消息,更新UI
}
}
class
MyHandler
extends
Handler
{
private
AllAppList
mContext;
public
MyHandler(Context
conn,int
a)
{
mContext
=
(AllAppList)conn;
}
public
MyHandler(Looper
L)
{
super(L);
}
//
子类必须重写此方法,接受数据
@Override
public
void
handleMessage(Message
msg)
{
//
TODO
Auto-generated
method
stub
super.handleMessage(msg);
Bundle
b
=
msg.getData();
String
rmsg
=
b.getString("rmsg");
if
("1".equals(rmsg))
{
//
do
nothing
List<Map>
list
=
new
ArrayList<Map>();
for(int
i
=0;i<16;i++){
n++;
Map
map
=
new
HashMap();
map.put("name",
n);
list.add(map);
}
int
pageNo
=
(int)Math.ceil(
list.size()/APP_PAGE_SIZE);
for
(int
i
=
0;
i
<
pageNo;
i++)
{
GridView
appPage
=
new
GridView(mContext);
//
get
the
"i"
page
data
appPage.setAdapter(new
AppAdapter(mContext,
list,
i));
appPage.setNumColumns(2);
appPage.setOnItemClickListener(listener);
mScrollLayout.addView(appPage);
}
//加载分页
pageControl
=
(PageControlView)
findViewById(R.id.pageControl);
pageControl.bindScrollViewGroup(mScrollLayout);
//加载分页数据
dataLoad.bindScrollViewGroup(mScrollLayout);
}
}
}
//分页数据
class
DataLoading
{
private
int
count;
public
void
bindScrollViewGroup(ScrollLayout
scrollViewGroup)
{
this.count=scrollViewGroup.getChildCount();
scrollViewGroup.setOnScreenChangeListenerDataLoad(new
OnScreenChangeListenerDataLoad()
{
public
void
onScreenChange(int
currentIndex)
{
//
TODO
Auto-generated
method
stub
generatePageControl(currentIndex);
}
});
}
private
void
generatePageControl(int
currentIndex){
//如果到最后一页,就加载16条记录
if(count==currentIndex+1){
MyThread
m
=
new
MyThread();
new
Thread(m).start();
}
}
}
}Java代码:package
cn.anycall.ju;
import
java.util.ArrayList;
import
java.util.List;
import
java.util.Map;
import
android.content.Context;
import
android.content.pm.PackageManager;
import
android.content.pm.ResolveInfo;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.BaseAdapter;
import
android.widget.ImageView;
import
android.widget.TextView;
import
cn.anycall.ju.R;
public
class
AppAdapter
extends
BaseAdapter
{
private
List<Map>
mList;
private
Context
mContext;
public
static
final
int
APP_PAGE_SIZE
=
4;
private
PackageManager
pm;
public
AppAdapter(Context
context,
List<Map>
list,
int
page)
{
mContext
=
context;
pm
=
context.getPackageManager();
mList
=
new
ArrayList<Map>();
int
i
=
page
*
APP_PAGE_SIZE;
int
iEnd
=
i+APP_PAGE_SIZE;
while
((i<list.size())
&&
(i<iEnd))
{
mList.add(list.get(i));
i++;
}
}
public
int
getCount()
{
//
TODO
Auto-generated
method
stub
return
mList.size();
}
public
Object
getItem(int
position)
{
//
TODO
Auto-generated
method
stub
return
mList.get(position);
}
public
long
getItemId(int
position)
{
//
TODO
Auto-generated
method
stub
return
position;
}
public
View
getView(int
position,
View
convertView,
ViewGroup
parent)
{
//
TODO
Auto-generated
method
stub
Map
appInfo
=
mList.get(position);
AppItem
appItem;
if
(convertView
==
null)
{
View
v
=
LayoutInflater.from(mContext).inflate(R.layout.app_item,
null);
appItem
=
new
AppItem();
appItem.mAppIcon
=
(ImageView)v.findViewById(R.id.imgdetail);
appItem.mAppName
=
(TextView)v.findViewById(R.id.tuaninfo);
v.setTag(appItem);
convertView
=
v;
}
else
{
appItem
=
(AppItem)convertView.getTag();
}
//
set
the
icon
appItem.mAppIcon.setImageResource(R.drawable.icon);
//
set
the
app
name
appItem.mAppName.setText(appInfo.get("name").toString());
return
convertView;
}
/**
*
每个应用显示的内容,包括图标和名称
*
@author
Yao.GUET
*
*/
class
AppItem
{
ImageView
mAppIcon;
TextView
mAppName;
}
}Java代码:package
cn.anycall.ju;
import
java.util.ArrayList;
import
java.util.List;
import
java.util.Map;
import
android.content.Context;
import
android.content.pm.PackageManager;
import
android.content.pm.ResolveInfo;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.BaseAdapter;
import
android.widget.ImageView;
import
android.widget.TextView;
import
cn.anycall.ju.R;
public
class
AppAdapter
extends
BaseAdapter
{
private
List<Map>
mList;
private
Context
mContext;
public
static
final
int
APP_PAGE_SIZE
=
4;
private
PackageManager
pm;
public
AppAdapter(Context
context,
List<Map>
list,
int
page)
{
mContext
=
context;
pm
=
context.getPackageManager();
mList
=
new
ArrayList<Map>();
int
i
=
page
*
APP_PAGE_SIZE;
int
iEnd
=
i+APP_PAGE_SIZE;
while
((i<list.size())
&&
(i<iEnd))
{
mList.add(list.get(i));
i++;
}
}
public
int
getCount()
{
//
TODO
Auto-generated
method
stub
return
mList.size();
}
public
Object
getItem(int
position)
{
//
TODO
Auto-generated
method
stub
return
mList.get(position);
}
public
long
getItemId(int
position)
{
//
TODO
Auto-generated
method
stub
return
position;
}
public
View
getView(int
position,
View
convertView,
ViewGroup
parent)
{
//
TODO
Auto-generated
method
stub
Map
appInfo
=
mList.get(position);
AppItem
appItem;
if
(convertView
==
null)
{
View
v
=
LayoutInflater.from(mContext).inflate(R.layout.app_item,
null);
appItem
=
new
AppItem();
appItem.mAppIcon
=
(ImageView)v.findViewById(R.id.imgdetail);
appItem.mAppName
=
(TextView)v.findViewById(R.id.tuaninfo);
v.setTag(appItem);
convertView
=
v;
}
else
{
appItem
=
(AppItem)convertView.getTag();
}
//
set
the
icon
appItem.mAppIcon.setImageResource(R.drawable.icon);
//
set
the
app
name
appItem.mAppName.setText(appInfo.get("name").toString());
return
convertView;
}
/**
*
每个应用显示的内容,包括图标和名称
*
@author
Yao.GUET
*
*/
class
AppItem
{
ImageView
mAppIcon;
TextView
mAppName;
}
}Java代码:package
cn.anycall.ju;
import
android.content.Context;
import
android.util.AttributeSet;
import
android.widget.ImageView;
import
android.widget.LinearLayout;
import
cn.anycall.ju.R;
import
cn.anycall.ju.ScrollLayout.OnScreenChangeListener;
public
class
PageControlView
extends
LinearLayout
{
private
Context
context;
private
int
count;
public
void
bindScrollViewGroup(ScrollLayout
scrollViewGroup)
{
this.count=scrollViewGroup.getChildCount();
System.out.println("count="+count);
generatePageControl(scrollViewGroup.getCurrentScreenIndex());
scrollViewGroup.setOnScreenChangeListener(new
OnScreenChangeListener()
{
public
void
onScreenChange(int
currentIndex)
{
//
TODO
Auto-generated
method
stub
generatePageControl(currentIndex);
}
});
}
public
PageControlView(Context
context)
{
super(context);
this.init(context);
}
public
PageControlView(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
this.init(context);
}
private
void
init(Context
context)
{
this.context=context;
}
private
void
generatePageControl(int
currentIndex)
{
this.removeAllViews();
int
pageNum
=
6;
//
显示多少个
int
pageNo
=
currentIndex+1;
//第几页
int
pageSum
=
this.count;
//总共多少页
if(pageSum>1){
int
currentNum
=
(pageNo
%
pageNum
==
0
?
(pageNo
/
pageNum)
-
1
:
(int)
(pageNo
/
pageNum))
*
pageNum;
if
(currentNum
<
0)
currentNum
=
0;
if
(pageNo
>
pageNum){
ImageView
imageView
=
new
ImageView(context);
imageView.setImageResource(R.drawable.zuo);
this.addView(imageView);
}
for
(int
i
=
0;
i
<
pageNum;
i++)
{
if
((currentNum
+
i
+
1)
>
pageSum
||
pageSum
<
2)
break;
ImageView
imageView
=
new
ImageView(context);
if(currentNum
+
i
+
1
==
pageNo){
imageView.setImageResource(R.drawable.page_indicator_focused);
}else{
imageView.setImageResource(R.drawable.page_indicator);
}
this.addView(imageView);
}
if
(pageSum
>
(currentNum
+
pageNum))
{
ImageView
imageView
=
new
ImageView(context);
imageView.setImageResource(R.drawable.you);
this.addView(imageView);
}
}
}
}Java代码:package
cn.anycall.ju;
import
android.content.Context;
import
android.util.AttributeSet;
import
android.widget.ImageView;
import
android.widget.LinearLayout;
import
cn.anycall.ju.R;
import
cn.anycall.ju.ScrollLayout.OnScreenChangeListener;
public
class
PageControlView
extends
LinearLayout
{
private
Context
context;
private
int
count;
public
void
bindScrollViewGroup(ScrollLayout
scrollViewGroup)
{
this.count=scrollViewGroup.getChildCount();
System.out.println("count="+count);
generatePageControl(scrollViewGroup.getCurrentScreenIndex());
scrollViewGroup.setOnScreenChangeListener(new
OnScreenChangeListener()
{
public
void
onScreenChange(int
currentIndex)
{
//
TODO
Auto-generated
method
stub
generatePageControl(currentIndex);
}
});
}
public
PageControlView(Context
context)
{
super(context);
this.init(context);
}
public
PageControlView(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
this.init(context);
}
private
void
init(Context
context)
{
this.context=context;
}
private
void
generatePageControl(int
currentIndex)
{
this.removeAllViews();
int
pageNum
=
6;
//
显示多少个
int
pageNo
=
currentIndex+1;
//第几页
int
pageSum
=
this.count;
//总共多少页
if(pageSum>1){
int
currentNum
=
(pageNo
%
pageNum
==
0
?
(pageNo
/
pageNum)
-
1
:
(int)
(pageNo
/
pageNum))
*
pageNum;
if
(currentNum
<
0)
currentNum
=
0;
if
(pageNo
>
pageNum){
ImageView
imageView
=
new
ImageView(context);
imageView.setImageResource(R.drawable.zuo);
this.addView(imageView);
}
for
(int
i
=
0;
i
<
pageNum;
i++)
{
if
((currentNum
+
i
+
1)
>
pageSum
||
pageSum
<
2)
break;
ImageView
imageView
=
new
ImageView(context);
if(currentNum
+
i
+
1
==
pageNo){
imageView.setImageResource(R.drawable.page_indicator_focused);
}else{
imageView.setImageResource(R.drawable.page_indicator);
}
this.addView(imageView);
}
if
(pageSum
>
(currentNum
+
pageNum))
{
ImageView
imageView
=
new
ImageView(context);
imageView.setImageResource(R.drawable.you);
this.addView(imageView);
}
}
}
}Java代码:package
cn.anycall.ju;
import
android.content.Context;
import
android.graphics.Canvas;
import
android.util.AttributeSet;
import
android.util.Log;
import
android.view.MotionEvent;
import
android.view.VelocityTracker;
import
android.view.View;
import
android.view.ViewConfiguration;
import
android.view.ViewGroup;
import
android.widget.Scroller;
/**
*
仿Launcher中的WorkSapce,可以左右滑动切换屏幕的类
*
*/
public
class
ScrollLayout
extends
ViewGroup
{
private
static
final
String
TAG
=
"ScrollLayout";
private
Scroller
mScroller;
private
VelocityTracker
mVelocityTracker;
private
int
mCurScreen;
private
int
mDefaultScreen
=
0;
private
static
final
int
TOUCH_STATE_REST
=
0;
private
static
final
int
TOUCH_STATE_SCROLLING
=
1;
private
static
final
int
SNAP_VELOCITY
=
600;
private
int
mTouchState
=
TOUCH_STATE_REST;
private
int
mTouchSlop;
private
float
mLastMotionX;
private
float
mLastMotionY;
private
int
currentScreenIndex
=
0;
public
int
getCurrentScreenIndex()
{
return
currentScreenIndex;
}
public
void
setCurrentScreenIndex(int
currentScreenIndex)
{
this.currentScreenIndex
=
currentScreenIndex;
}
public
ScrollLayout(Context
context,
AttributeSet
attrs)
{
this(context,
attrs,
0);
//
TODO
Auto-generated
constructor
stub
}
public
ScrollLayout(Context
context,
AttributeSet
attrs,
int
defStyle)
{
super(context,
attrs,
defStyle);
//
TODO
Auto-generated
constructor
stub
mScroller
=
new
Scroller(context);
mCurScreen
=
mDefaultScreen;
mTouchSlop
=
ViewConfiguration.get(getContext()).getScaledTouchSlop();
}
@Override
protected
void
onLayout(boolean
changed,
int
l,
int
t,
int
r,
int
b)
{
//
TODO
Auto-generated
method
stub
int
childLeft
=
0;
final
int
childCount
=
getChildCount();
System.out.println("childCount="
+
childCount);
for
(int
i
=
0;
i
<
childCount;
i++)
{
final
View
childView
=
getChildAt(i);
if
(childView.getVisibility()
!=
View.GONE)
{
final
int
childWidth
=
childView.getMeasuredWidth();
childView.layout(childLeft,
0,
childLeft
+
childWidth,
childView.getMeasuredHeight());
childLeft
+=
childWidth;
}
}
}
@Override
protected
void
onMeasure(int
widthMeasureSpec,
int
heightMeasureSpec)
{
Log.e(TAG,
"onMeasure");
super.onMeasure(widthMeasureSpec,
heightMeasureSpec);
final
int
width
=
MeasureSpec.getSize(widthMeasureSpec);
final
int
widthMode
=
MeasureSpec.getMode(widthMeasureSpec);
if
(widthMode
!=
MeasureSpec.EXACTLY)
{
throw
new
IllegalStateException(
"ScrollLayout
only
canmCurScreen
run
at
EXACTLY
mode!");
}
final
int
heightMode
=
MeasureSpec.getMode(heightMeasureSpec);
if
(heightMode
!=
MeasureSpec.EXACTLY)
{
throw
new
IllegalStateException(
"ScrollLayout
only
can
run
at
EXACTLY
mode!");
}
//
The
children
are
given
the
same
width
and
height
as
the
scrollLayout
final
int
count
=
getChildCount();
for
(int
i
=
0;
i
<
count;
i++)
{
getChildAt(i).measure(widthMeasureSpec,
heightMeasureSpec);
}
System.out.println("moving
to
screen
"
+
mCurScreen);
scrollTo(mCurScreen
*
width,
0);
}
/**
*
According
to
the
position
of
current
layout
scroll
to
the
destination
*
page.
*/
public
void
snapToDestination()
{
final
int
screenWidth
=
getWidth();
final
int
destScreen
=
(getScrollX()
+
screenWidth
/
2)
/
screenWidth;
snapToScreen(destScreen);
}
public
void
snapToScreen(int
whichScreen)
{
//
get
the
valid
layout
page
whichScreen
=
Math.max(0,
Math.min(whichScreen,
getChildCount()
-
1));
if
(getScrollX()
!=
(whichScreen
*
getWidth()))
{
final
int
delta
=
whichScreen
*
getWidth()
-
getScrollX();
mScroller.startScroll(getScrollX(),
0,
delta,
0,
Math.abs(delta)
*
2);
mCurScreen
=
whichScreen;
invalidate();
//
Redraw
the
layout
}
}
public
void
setToScreen(int
whichScreen)
{
whichScreen
=
Math.max(0,
Math.min(whichScreen,
getChildCount()
-
1));
mCurScreen
=
whichScreen;
scrollTo(whichScreen
*
getWidth(),
0);
}
public
int
getCurScreen()
{
return
mCurScreen;
}
@Override
public
void
computeScroll()
{
//
TODO
Auto-generated
method
stub
if
(mSputeScrollOffset())
{
scrollTo(mScroller.getCurrX(),
mScroller.getCurrY());
postInvalidate();
}
}
@Override
public
boolean
onTouchEvent(MotionEvent
event)
{
//
TODO
Auto-generated
method
stub
if
(mVelocityTracker
==
null)
{
mVelocityTracker
=
VelocityTracker.obtain();
}
mVelocityTracker.addMovement(event);
final
int
action
=
event.getAction();
final
float
x
=
event.getX();
final
float
y
=
event.getY();
switch
(action)
{
case
MotionEvent.ACTION_DOWN:
Log.e(TAG,
"event
down!");
if
(!mScroller.isFinished())
{
mScroller.abortAnimation();
}
mLastMotionX
=
x;
break;
case
MotionEvent.ACTION_MOVE:
int
deltaX
=
(int)
(mLastMotionX
-
x);
mLastMotionX
=
x;
scrollBy(deltaX,
0);
break;
case
MotionEvent.ACTION_UP:
Log.e(TAG,
"event
:
up");
//
if
(mTouchState
==
TOUCH_STATE_SCROLLING)
{
final
VelocityTracker
velocityTracker
=
mVelocityTracker;
velocityTputeCurrentVelocity(1000);
int
velocityX
=
(int)
velocityTracker.getXVelocity();
Log.e(TAG,
"velocityX:"
+
velocityX);
if
(velocityX
>
SNAP_VELOCITY
&&
mCurScreen
>
0)
{
//
Fling
enough
to
move
left
Log.e(TAG,
"snap
left");
onScreenChangeListener.onScreenChange(mCurScreen
-
1);
System.out.println("mCurScreen="
+
(mCurScreen
-
1));
snapToScreen(mCurScreen
-
1);
}
else
if
(velocityX
<
-SNAP_VELOCITY
&&
mCurScreen
<
getChildCount()
-
1)
{
//
Fling
enough
to
move
right
Log.e(TAG,
"snap
right");
onScreenChangeListener.onScreenChange(mCurScreen
+
1);
//只往右移动才加载数据
onScreenChangeListenerDataLoad.onScreenChange(mCurScreen+1);
snapToScreen(mCurScreen
+
1);
}
else
{
snapToDestination();
}
if
(mVelocityTracker
!=
null)
{
mVelocityTracker.recycle();
mVelocityTracker
=
null;
}
//
}
mTouchState
=
TOUCH_STATE_REST;
break;
case
MotionEvent.ACTION_CANCEL:
mTouchState
=
TOUCH_STATE_REST;
break;
}
return
true;
}
@Override
public
boolean
onInterceptTouchEvent(MotionEvent
ev)
{
//
TODO
Auto-generated
method
stub
Log.e(TAG,
"onInterceptTouchEvent-slop:"
+
mTouchSlop);
final
int
action
=
ev.getAction();
if
((action
==
MotionEvent.ACTION_MOVE)
&&
(mTouchState
!=
TOUCH_STATE_REST))
{
return
true;
}
final
float
x
=
ev.getX();
final
float
y
=
ev.getY();
switch
(action)
{
case
MotionEvent.ACTION_MOVE:
final
int
xDiff
=
(int)
Math.abs(mLastMotionX
-
x);
if
(xDiff
>
mTouchSlop)
{
mTouchState
=
TOUCH_STATE_SCROLLING;
}
break;
case
MotionEvent.ACTION_DOWN:
mLastMotionX
=
x;
mLastMotionY
=
y;
mTouchState
=
mScroller.isFinished()
?
TOUCH_STATE_REST
:
TOUCH_STATE_SCROLLING;
break;
case
MotionEvent.ACTION_CANCEL:
case
MotionEvent.ACTION_UP:
mTouchState
=
TOUCH_STATE_REST;
break;
}
return
mTouchState
!=
TOUCH_STATE_REST;
}
//分页监听
public
interface
OnScreenChangeListener
{
void
onScreenChange(int
currentIndex);
}
private
OnScreenChangeListener
onScreenChangeListener;
public
void
setOnScreenChangeListener(
OnScreenChangeListener
onScreenChangeListener)
{
this.onScreenChangeListener
=
onScreenChangeListener;
}
//动态数据监听
public
interface
OnScreenChangeListenerDataLoad
{
void
onScreenChange(int
currentIndex);
}
private
OnScreenChangeListenerDataLoad
onScreenChangeListenerDataLoad;
public
void
setOnScreenChangeListenerDataLoad(OnScreenChangeListenerDataLoad
onScreenChangeListenerDataLoad)
{
this.onScreenChangeListenerDataLoad
=
onScreenChangeListenerDataLoad;
}
}Java代码package
cn.anycall.ju;
import
android.content.Context;
import
android.graphics.Canvas;
import
android.util.AttributeSet;
import
android.util.Log;
import
android.view.MotionEvent;
import
android.view.VelocityTracker;
import
android.view.View;
import
android.view.ViewConfiguration;
import
android.view.ViewGroup;
import
android.widget.Scroller;
/**
*
仿Launcher中的WorkSapce,可以左右滑动切换屏幕的类
*
*/
public
class
ScrollLayout
extends
ViewGroup
{
private
static
final
String
TAG
=
"ScrollLayout";
private
Scroller
mScroller;
private
VelocityTracker
mVelocityTracker;
private
int
mCurScreen;
private
int
mDefaultScreen
=
0;
private
static
final
int
TOUCH_STATE_REST
=
0;
private
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025应届大学实习生合同协议
- 2025签订房屋租赁合同后遭遇意外损坏维权难题待解
- 2025关于商业店铺租赁合同范本
- 2025年设备租赁合同解析
- 2025工程监理与咨询服务合同(中英文)
- 2025解除合同协议书
- 2025股权转让委托合同
- 2025技术转让合同范本协议书模板
- 2025企业合同风险防控策略研究
- 2025新房购房定金合同
- 2025年无人机驾驶员职业技能考核试卷(无人机操控技术)
- GB/T 44569.1-2024土工合成材料内部节点强度的测定第1部分:土工格室
- 数学-二年级(下册)-人教版-《混合运算-解决问题》教学课件
- 行政诉讼证据(39页)ppt课件
- T∕CHAS 10-4-13-2020 中国医院质量安全管理 第4-13部分:医疗管理住院患者健康教育
- 量化策略设计及实战应用PPT通用课件
- 器官移植PPT课件
- 茶艺-认识茶具(课堂PPT)
- 12【电商人必备】产品拍摄工作计划表
- 第一节二重积分的概念和性质ppt课件
- 公司重大经营决策法律审核管理办法
评论
0/150
提交评论