利用FrameLayout连接一组view实现流畅的左右滑动 推荐
2011-07-25 16:53
351 查看
[align=left] 前段时间在网上找到一个左右滑动的例子,广泛使用在uc,墨迹天气等知名软件中,网上实现了一个布局的类(具体代码详见附件),继承FrameLayout
public class FlingGallery extends FrameLayout;
[align=left] [/align]
[align=left]该类声明的变量如下:[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]其中主要变量有 mCurrentPosition:当前索引。[/align]
[align=left] mCurrentViewNumber:当前view的索引。[/align]
[align=left] mViews 用来存放一组滑动的view。[/align]
[align=left] mAnimation 动画动作。[/align]
[align=left] [/align]
[align=left] 类中还封装了类似跳转到下一个view和上一个view的常用切换方法,以及一些常用的布局方法。[/align]
[align=left] [/align]
[align=left]在activity中可以这样使用:[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]在adapter中把要显示的views放入其中,代码如下:[/align]
在使用过程中,发现该类,只有跳转到上一个和下一个view 的方法,不能指定跳转到某个view,仔细观察代码后,这个方法可以使用它所给的nextd等实现,代码如下:
这里这样写这个方法实际上是取巧自上一步与下一步方法,把当前id与要跳转的id相减,得出要跳转次数,进行跳转,如果深入修改该类中的moveNext方法或者movePrevious方法同样可以完成该操作,不过没有这个方法简洁明了。
附件:http://down.51cto.com/data/2358602
,声明
如下:[/align]
public class FlingGallery extends FrameLayout;
[align=left] [/align]
[align=left]该类声明的变量如下:[/align]
[align=left] [/align]
private int mGalleryWidth = 0; private boolean mIsTouched = false; private boolean mIsDragging = false; private float mCurrentOffset = 0.0f; private long mScrollTimestamp = 0; private int mFlingDirection = 0; private int mCurrentPosition = 0; private int mCurrentViewNumber = 0; private Context mContext; private Adapter mAdapter; private FlingGalleryView[] mViews; private FlingGalleryAnimation mAnimation; private GestureDetector mGestureDetector; private Interpolator mDecelerateInterpolater;
[align=left] [/align]
[align=left]其中主要变量有 mCurrentPosition:当前索引。[/align]
[align=left] mCurrentViewNumber:当前view的索引。[/align]
[align=left] mViews 用来存放一组滑动的view。[/align]
[align=left] mAnimation 动画动作。[/align]
[align=left] [/align]
[align=left] 类中还封装了类似跳转到下一个view和上一个view的常用切换方法,以及一些常用的布局方法。[/align]
[align=left] [/align]
[align=left]在activity中可以这样使用:[/align]
[align=left] [/align]
[align=left] [/align]
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mGallery = new FlingGallery(this); //mGallery.setPaddingWidth(5); mGallery.setAdapter(mBabyListAdapter); mGallery.setIsGalleryCircular(true); LinearLayout layout = new LinearLayout(getApplicationContext()); layout = (LinearLayout) PublicFunctionAndUnit.getMainView( GalleryTest.this, layout, mGallery); layout.setBackgroundResource(R.drawable.main_bg); setContentView(layout); }
[align=left]在adapter中把要显示的views放入其中,代码如下:[/align]
BaseAdapter mBabyListAdapter = new BaseAdapter() { @Override public int getCount() { return 7; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // GalleryViewItem item = new GalleryViewItem(GalleryTest.this, // position); LinearLayout item = getLinearLayout(GalleryTest.this, position); return item; } }; private int[] itemViewIds = new int[] { R.layout.item1, R.layout.item2, R.layout.item3, R.layout.item4, R.layout.item5, R.layout.item6, R.layout.item7 }; private LinearLayout getLinearLayout(Context context, int position) { LinearLayout layout = new LinearLayout(context); LayoutInflater factory = LayoutInflater.from(context); View item = factory.inflate(itemViewIds[position], null); layout.addView(item, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); return layout; }
在使用过程中,发现该类,只有跳转到上一个和下一个view 的方法,不能指定跳转到某个view,仔细观察代码后,这个方法可以使用它所给的nextd等实现,代码如下:
public void moveToViewbyId(int id) { int num=id-mCurrentPosition; if(num!=0) { if(num>0) { for(int i=0;i<num;i++) { moveNext(); } } else { for(int i=0;i<(0-num);i++) { movePrevious(); } } } }
这里这样写这个方法实际上是取巧自上一步与下一步方法,把当前id与要跳转的id相减,得出要跳转次数,进行跳转,如果深入修改该类中的moveNext方法或者movePrevious方法同样可以完成该操作,不过没有这个方法简洁明了。
附件:http://down.51cto.com/data/2358602
相关文章推荐
- 利用FrameLayout连接一组view实现流畅的左右滑动
- 利用viewpager实现图片左右循环滑动效果
- Android 仿美团网,探索利用ViewPager+GridView实现左右滑动查看更多分类的功能
- Android 利用ViewPager实现图片可以左右循环滑动效果附代码下载
- android利用ViewPager实现左右滑动功能
- 利用ViewPager实现可左右滑动的Action Tab
- Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换
- 利用ViewPager实现可左右滑动的Action Tab
- IOS之左右滑动效果的实现——利用SWRevealViewController
- 利用RecyclerView实现的一个动画给变item的位置和左右滑动删除该RcyclervView的Item条目
- 利用ViewPageIndicator+ViewPager实现左右滑动带图标tab标签功能
- 利用ViewPager+Fragment+actionbar实现可左右滑动的Action Tab
- Fragment利用ViewPager实现左右滑动--第三方开源--SlidingTabLayout和SlidingTabStrip实现
- IOS之左右滑动效果的实现——利用PPRevealViewController
- 利用ViewPager+Fragment+actionbar实现可左右滑动的Action Tab
- 利用ViewPager实现可左右滑动的Action Tab
- 利用ViewPager+Fragment+actionbar实现可左右滑动的Action Tab
- 重写viewgroup实现左右滑动(修改)
- Android 仿美团,使用ViewPager+GridView实现左右滑动查看更多分类的功能
- Android 利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果(牛逼)