最近在研究如何做出仿微信,仿新浪等应用,第一次安装使用的使用展示应用程序的新特性和用法。

实现功能:左右手势滑屏

底部小圆点随当前显示页跳动

浮动按钮显示。当触屏事件发生显示,否则就渐渐消失

先转个文章:http://blog.csdn.net/feng88724/article/details/6973662

第一种: ViewFlipper + GestureDetector

第二种: ActivityGroup +   GestureDetector

第三种: ViewPager  (Android3.0+)

第四种: ViewFlow (开源项目)

话不多说,先放上效果图

向右滑动,或者点击按钮向右

怎么样,是不是很心动~~~!哈哈、

实现左右滑屏是需要一个叫做ViewPager的东西。具体ViewPager怎么用我就不赘述了。(PS注意导入ViewPager的兼容包)

接下来是代码:

首先在main.xml中声明ViewPager:

[html] view
plain
copy

  1. <LinearLayout
  2. android:id="@+id/linearLayout01"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="vertical" >
  6. <android.support.v4.view.ViewPager
  7. android:id="@+id/guidePages"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"/>
  10. lt;/LinearLayout>
[html] view
plain
copy

  1. 和一个viewGroup放小圆点
[html] view
plain
copy

  1. <LinearLayout
  2. android:id="@+id/viewGroup"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:layout_alignParentBottom="true"
  6. android:layout_marginBottom="40dp"
  7. android:gravity="center_horizontal"
  8. android:orientation="horizontal" >
  9. </LinearLayout>

接着在item01.xml等几个xml中放置要显示的图片,因为几个都一样,就不都贴上来了。

[html] view
plain
copy

  1. <ImageView
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:background="@drawable/feature_guide_0" >
  5. </ImageView>

接下来是核心代码:

[java] view
plain
copy

  1. public class GuideViewActivity extends Activity {
  2. private ViewPager viewPager;
  3. private ArrayList<View> pageViews;
  4. private ImageView imageView;
  5. private ImageView[] imageViews;
  6. // 包裹滑动图片LinearLayout
  7. private ViewGroup main;
  8. // 包裹小圆点的LinearLayout
  9. private ViewGroup group;
  10. //左箭头按钮
  11. private ImageView imageViewLeft;
  12. //右箭头按钮
  13. private ImageView imageViewRight;
  14. //当前页码
  15. private int currentIndex;
  16. //ImageView的alpha值
  17. private int mAlpha = 0;
  18. private boolean isHide;
  19. /** Called when the activity is first created. */
  20. @Override
  21. public void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. //将要显示的图片放到ArrayList当中,存到适配器中
  24. LayoutInflater inflater = getLayoutInflater();
  25. pageViews = new ArrayList<View>();
  26. pageViews.add(inflater.inflate(R.layout.item01, null));
[java] view
plain
copy

  1. ...
[java] view
plain
copy

  1. imageViews = new ImageView[pageViews.size()];
  2. main = (ViewGroup)inflater.inflate(R.layout.main, null);
  3. group = (ViewGroup)main.findViewById(R.id.viewGroup);
  4. viewPager = (ViewPager)main.findViewById(R.id.guidePages);
  5. imageViewLeft = (ImageView)main.findViewById(R.id.imageView1);
  6. imageViewRight = (ImageView)main.findViewById(R.id.imageView2);
  7. imageViewLeft.setAlpha(0);
  8. imageViewRight.setAlpha(0);
  9. //将小圆点放到imageView数组当中
  10. for (int i = 0; i < pageViews.size(); i++) {
  11. imageView = new ImageView(GuideViewActivity.this);
  12. imageView.setLayoutParams(new LayoutParams(20,20));
  13. imageView.setPadding(20, 0, 20, 0);
  14. imageViews[i] = imageView;
  15. if (i == 0) {
  16. //默认选中第一张图片
  17. imageViews[i].setBackgroundResource(R.drawable.page_indicator_focused);
  18. } else {
  19. imageViews[i].setBackgroundResource(R.drawable.page_indicator);
  20. }
  21. group.addView(imageViews[i]);
  22. }
  23. setContentView(main);
  24. viewPager.setAdapter(new GuidePageAdapter());
  25. viewPager.setOnPageChangeListener(new GuidePageChangeListener());
  26. imageViewLeft.setOnClickListener(new ButtonListener());
  27. imageViewRight.setOnClickListener(new ButtonListener());
  28. }
  29. //左右切换屏幕的按钮监听器
  30. class ButtonListener implements OnClickListener{
  31. @Override
  32. public void onClick(View v) {
  33. // TODO Auto-generated method stub
  34. int showNext=0;
  35. if(v.getId() == R.id.imageView1) {
  36. System.out.println("点击了向左的按钮");
  37. if(currentIndex ==0 )
  38. showNext = currentIndex;
  39. else
  40. showNext = currentIndex-1;
  41. viewPager.setCurrentItem(showNext);
  42. }
  43. if(v.getId() == R.id.imageView2){
  44. System.out.println("点击了向右的按钮");
  45. if(currentIndex == imageViews.length)
  46. showNext = currentIndex;
  47. else
  48. showNext = currentIndex+1;
  49. viewPager.setCurrentItem(showNext);
  50. }
  51. System.out.println("当前页码:"+showNext);
  52. }
  53. }
  54. /**
  55. * 设置按钮渐显效果
  56. */
  57. private Handler mHandler = new Handler()
  58. {
  59. public void handleMessage(Message msg) {
  60. if(msg.what==1 && mAlpha<255){
  61. //通过设置不透明度设置按钮的渐显效果
  62. mAlpha += 50;
  63. if(mAlpha>255)
  64. mAlpha=255;
  65. imageViewLeft.setAlpha(mAlpha);
  66. imageViewLeft.invalidate();
  67. imageViewRight.setAlpha(mAlpha);
  68. imageViewRight.invalidate();
  69. if(!isHide && mAlpha<255)
  70. mHandler.sendEmptyMessageDelayed(1, 100);
  71. }else if(msg.what==0 && mAlpha>0){
  72. mAlpha -= 3;
  73. if(mAlpha<0)
  74. mAlpha=0;
  75. imageViewLeft.setAlpha(mAlpha);
  76. imageViewLeft.invalidate();
  77. imageViewRight.setAlpha(mAlpha);
  78. imageViewRight.invalidate();
  79. if(isHide && mAlpha>0)
  80. mHandler.sendEmptyMessageDelayed(0, 2);
  81. }
  82. }
  83. };
  84. private void showImageButtonView(){
  85. isHide = false;
  86. mHandler.sendEmptyMessage(1);
  87. }
  88. private void hideImageButtonView(){
  89. new Thread(){
  90. public void run() {
  91. try {
  92. isHide = true;
  93. mHandler.sendEmptyMessage(0);
  94. } catch (Exception e) {
  95. ;
  96. }
  97. }
  98. }.start();
  99. }
  100. @Override
  101. public boolean dispatchTouchEvent(MotionEvent ev) {
  102. System.out.println("this is dispatch");
  103. System.out.println("触碰屏幕");
  104. switch (ev.getAction()) {
  105. case MotionEvent.ACTION_MOVE:
  106. case MotionEvent.ACTION_DOWN:
  107. showImageButtonView();
  108. break;
  109. case MotionEvent.ACTION_UP:
  110. hideImageButtonView();
  111. break;
  112. }
  113. return super.dispatchTouchEvent(ev);
  114. }
  115. // 指引页面数据适配器,实现适配器方法
  116. class GuidePageAdapter extends PagerAdapter {
  117. @Override
  118. public int getCount() {
  119. return pageViews.size();
  120. }
  121. @Override
  122. public boolean isViewFromObject(View arg0, Object arg1) {
  123. return arg0 == arg1;
  124. }
  125. @Override
  126. public int getItemPosition(Object object) {
  127. // TODO Auto-generated method stub
  128. return super.getItemPosition(object);
  129. }
  130. @Override
  131. public void destroyItem(View arg0, int arg1, Object arg2) {
  132. // TODO Auto-generated method stub
  133. ((ViewPager) arg0).removeView(pageViews.get(arg1));
  134. }
  135. @Override
  136. public Object instantiateItem(View arg0, int arg1) {
  137. // TODO Auto-generated method stub
  138. ((ViewPager) arg0).addView(pageViews.get(arg1));
  139. return pageViews.get(arg1);
  140. }
  141. @Override
  142. public void restoreState(Parcelable arg0, ClassLoader arg1) {
  143. // TODO Auto-generated method stub
  144. }
  145. @Override
  146. public Parcelable saveState() {
  147. // TODO Auto-generated method stub
  148. return null;
  149. }
  150. @Override
  151. public void startUpdate(View arg0) {
  152. // TODO Auto-generated method stub
  153. }
  154. @Override
  155. public void finishUpdate(View arg0) {
  156. // TODO Auto-generated method stub
  157. }
  158. }
  159. // 指引页面更改事件监听器,左右滑动图片时候,小圆点变换显示当前图片位置
  160. class GuidePageChangeListener implements OnPageChangeListener {
  161. @Override
  162. public void onPageScrollStateChanged(int arg0) {
  163. // TODO Auto-generated method stub
  164. }
  165. @Override
  166. public void onPageScrolled(int arg0, float arg1, int arg2) {
  167. // TODO Auto-generated method stub
  168. }
  169. @Override
  170. public void onPageSelected(int arg0) {
  171. currentIndex = arg0;
  172. for (int i = 0; i < imageViews.length; i++) {
  173. imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused);
  174. if (arg0 != i) {
  175. imageViews[i].setBackgroundResource(R.drawable.page_indicator);
  176. }
  177. }
  178. }
  179. }

啊~到这里就都实现了~

android仿新浪引导界面的更多相关文章

  1. Android仿新浪新闻SlidingMenu界面的实现 .

    先看看原图: 如图所示,这种侧滑效果以另一种方式替代了原先tab导航的那种用户体验方式 给人耳目一新的感觉,现已被广大知名应用所效仿,如新浪新闻,网易新闻,人人网等 那么这种效果该如何实现呢?那就需要 ...

  2. jquery实现隐藏显示层动画效果、仿新浪字符动态输入、tab效果

    已经有两年多没登陆csdn账号了,中间做了些旁的事,可是现在却还是回归程序,但改做前端了,虽然很多东西都已忘得差不多了,但还是应该摆正心态,慢慢来,在前端漫游,做一只快乐双鱼. 路是一步一步走出来的, ...

  3. 仿新浪首页、主题、详情页,纯html静态页面

    仿新浪首页.主题.详情页.纯html静态页面,下载地址: http://download.csdn.net/detail/sweetsuzyhyf/8085535

  4. android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)

    首先我们还是看一些示例:(网易,新浪,百度) 显示效果都不错,可是手感就不一样了,百度最棒,网易还行,新浪就操作很不好,这里我说的是滑动切换图片.自己可以测试一下.不得不说牛叉的公司确实有哦牛叉的道理 ...

  5. 【转】Android android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)

    首先我们还是看一些示例:(网易,新浪,百度)      下面我简单的介绍下实现方法:其实就是listview addHeaderView.只不过这个view是一个可以切换图片的view,至于这个vie ...

  6. android——利用SharedPreference做引导界面

    很久以前就接触过sharedPreference这个android中的存储介质.但是一直没有实际使用过,今天在看之前做的“民用机型大全”的app时,突然想到可以使用sharedPreference类来 ...

  7. 转-Android仿微信气泡聊天界面设计

    微信的气泡聊天是仿iPhone自带短信而设计出来的,不过感觉还不错可以尝试一下仿着微信的气泡聊天做一个Demo,给大家分享一下!效果图如下: 气泡聊天最终要的是素材,要用到9.png文件的素材,这样气 ...

  8. Android仿微信气泡聊天界面设计

    微信的气泡聊天是仿iPhone自带短信而设计出来的,不过感觉还不错可以尝试一下仿着微信的气泡聊天做一个Demo,给大家分享一下!效果图如下: 气泡聊天最终要的是素材,要用到9.png文件的素材,这样气 ...

  9. Android -- 仿小红书欢迎界面

    1,觉得小红书的欢迎界面感觉很漂亮,就像来学习学习一下来实现类似于这种效果  原效果图如下: 2,根据效果我们来一点点分析 第一步:首先看一下我们的主界面布局文件视图效果如下: main_activi ...

随机推荐

  1. Ten ways to improve the performance of large tables in MySQL--转载

    原文地址:http://www.tocker.ca/2013/10/24/improving-the-performance-of-large-tables-in-mysql.html Today I ...

  2. oled模块的驱动芯片和pcb图

    参考自:http://blog.sina.com.cn/s/blog_57ad1bd20102wtq8.html oled的驱动芯片是:SSD1306驱动芯片,这个芯片嵌入在屏幕里面,从外面看不出来, ...

  3. (素材源代码) 猫猫学IOS(五)UI之360等下载管理器九宫格UI

    猫猫分享,必须精品 先看效果 代码学习地址: 猫猫学IOS(五)UI之360等下载管理器九宫格UI 猫猫学IOS(五)UI之360等下载管理器九宫格UI http://blog.csdn.net/u0 ...

  4. vc6.0 点编译时提示Cannot complile the file &#39;D:\souce-code\vc-workspace\对话框\MainFrm.h&#39;; no compile tool is

    问题描写叙述: vc6.0程序,点击编译时提示对话框,内容为: Cannot complile the file 'D:\souce-code\vc-workspace\对话框\MainFrm.h'; ...

  5. python的sorted() 函数

    摘自:http://www.runoob.com/python/python-func-sorted.html sortedClassCount=sorted(classCount.items(),k ...

  6. 【习题 5-11 UVA 12504 】Updating a Dictionary

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 不确定某个map里面是否有某个关键字的时候. 要用find来确定. 如果直接用访问下标的形式去做的话. 会强行给他加一个那个关键字( ...

  7. php课程 2-7 php中常量如何定义

    php课程 2-7 php中常量如何定义 一.总结 一句话总结:函数方式定义和普通变量方式定义    define('PI','3.14').键值对,和session一样.    const PI=3 ...

  8. vue-cli3使用vue-svg-loader加载svg

    vue-svg-loader Documentation - FAQ webpack loader that lets you use SVG files as Vue components Micr ...

  9. 18.1 IIC驱动程序(基于3.4.2内核)

    驱动使用smbus提供的IIC读写函数可以参考smbus-protocol.txt文档:应用层直接使用IIC读写函数读写IIC设备,应用层读写函数是由i2c-tools这个库提供的(编译的使用和应用程 ...

  10. perl对比两个文件的行

    perl对比两个文件的行 对比两个文件的各行,得到A与B相同的行/A与B不相同的行 主要功能 得到相同行 得到A中包含,B不包含的行 得到B中包含,A中不包含的行 具体执行情况 Perl代码 #!/u ...