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

实现功能:左右手势滑屏

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

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

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

第一种: ViewFlipper + GestureDetector

第二种: ActivityGroup + GestureDetector

第三种: ViewPager (Android3.0+)

第四种: ViewFlow (开源项目)

话不多说,先放上效果图

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

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

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

接下来是代码:

首先在main.xml中声明ViewPager:

     <LinearLayoutandroid:id="@+id/linearLayout01"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" ><android.support.v4.view.ViewPagerandroid:id="@+id/guidePages"android:layout_width="fill_parent"android:layout_height="fill_parent"/></LinearLayout>
和一个viewGroup放小圆点
    <LinearLayout  android:id="@+id/viewGroup"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:layout_alignParentBottom="true"  android:layout_marginBottom="40dp"  android:gravity="center_horizontal"  android:orientation="horizontal" >  </LinearLayout>

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

        <ImageViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/feature_guide_0" ></ImageView>

接下来是核心代码:

public class GuideViewActivity extends Activity {private ViewPager viewPager;  private ArrayList<View> pageViews;  private ImageView imageView;  private ImageView[] imageViews; // 包裹滑动图片LinearLayoutprivate ViewGroup main;// 包裹小圆点的LinearLayoutprivate ViewGroup group;//左箭头按钮private ImageView imageViewLeft;//右箭头按钮private ImageView imageViewRight;//当前页码private int currentIndex;//ImageView的alpha值   private int mAlpha = 0;private boolean isHide;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//将要显示的图片放到ArrayList当中,存到适配器中LayoutInflater inflater = getLayoutInflater();  pageViews = new ArrayList<View>();  pageViews.add(inflater.inflate(R.layout.item01, null));
 ...     
        imageViews = new ImageView[pageViews.size()];  main = (ViewGroup)inflater.inflate(R.layout.main, null);  group = (ViewGroup)main.findViewById(R.id.viewGroup);  viewPager = (ViewPager)main.findViewById(R.id.guidePages);  imageViewLeft = (ImageView)main.findViewById(R.id.imageView1);imageViewRight = (ImageView)main.findViewById(R.id.imageView2);imageViewLeft.setAlpha(0);imageViewRight.setAlpha(0);//将小圆点放到imageView数组当中for (int i = 0; i < pageViews.size(); i++) {  imageView = new ImageView(GuideViewActivity.this);  imageView.setLayoutParams(new LayoutParams(20,20));  imageView.setPadding(20, 0, 20, 0);  imageViews[i] = imageView;  if (i == 0) {  //默认选中第一张图片imageViews[i].setBackgroundResource(R.drawable.page_indicator_focused);  } else {  imageViews[i].setBackgroundResource(R.drawable.page_indicator);  }  group.addView(imageViews[i]);  }  setContentView(main);viewPager.setAdapter(new GuidePageAdapter());  viewPager.setOnPageChangeListener(new GuidePageChangeListener());imageViewLeft.setOnClickListener(new ButtonListener());imageViewRight.setOnClickListener(new ButtonListener());}//左右切换屏幕的按钮监听器class ButtonListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubint showNext=0;if(v.getId() == R.id.imageView1) {System.out.println("点击了向左的按钮");if(currentIndex ==0 )showNext = currentIndex;elseshowNext = currentIndex-1;viewPager.setCurrentItem(showNext);}if(v.getId() == R.id.imageView2){System.out.println("点击了向右的按钮");if(currentIndex == imageViews.length)showNext = currentIndex;elseshowNext = currentIndex+1;viewPager.setCurrentItem(showNext);}System.out.println("当前页码:"+showNext);}}/*** 设置按钮渐显效果*/private Handler mHandler = new Handler(){public void handleMessage(Message msg) {if(msg.what==1 && mAlpha<255){           //通过设置不透明度设置按钮的渐显效果mAlpha += 50;if(mAlpha>255)mAlpha=255;imageViewLeft.setAlpha(mAlpha);imageViewLeft.invalidate();imageViewRight.setAlpha(mAlpha);imageViewRight.invalidate();if(!isHide && mAlpha<255)mHandler.sendEmptyMessageDelayed(1, 100);}else if(msg.what==0 && mAlpha>0){mAlpha -= 3;if(mAlpha<0)mAlpha=0;imageViewLeft.setAlpha(mAlpha);imageViewLeft.invalidate();imageViewRight.setAlpha(mAlpha);imageViewRight.invalidate();if(isHide && mAlpha>0)mHandler.sendEmptyMessageDelayed(0, 2);}            }};private void showImageButtonView(){isHide = false;mHandler.sendEmptyMessage(1);}private void hideImageButtonView(){new Thread(){public void run() {try {isHide = true;mHandler.sendEmptyMessage(0);} catch (Exception e) {;}}}.start();}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {System.out.println("this is dispatch");System.out.println("触碰屏幕");switch (ev.getAction()) {case MotionEvent.ACTION_MOVE:case MotionEvent.ACTION_DOWN:showImageButtonView();            break;case MotionEvent.ACTION_UP:hideImageButtonView();                break;}return super.dispatchTouchEvent(ev);}// 指引页面数据适配器,实现适配器方法class GuidePageAdapter extends PagerAdapter {  @Override  public int getCount() {  return pageViews.size();  }  @Override  public boolean isViewFromObject(View arg0, Object arg1) {  return arg0 == arg1;  }  @Override  public int getItemPosition(Object object) {  // TODO Auto-generated method stub  return super.getItemPosition(object);  }  @Override  public void destroyItem(View arg0, int arg1, Object arg2) {  // TODO Auto-generated method stub  ((ViewPager) arg0).removeView(pageViews.get(arg1));  }  @Override  public Object instantiateItem(View arg0, int arg1) {  // TODO Auto-generated method stub  ((ViewPager) arg0).addView(pageViews.get(arg1));  return pageViews.get(arg1);  }  @Override  public void restoreState(Parcelable arg0, ClassLoader arg1) {  // TODO Auto-generated method stub  }  @Override  public Parcelable saveState() {  // TODO Auto-generated method stub  return null;  }  @Override  public void startUpdate(View arg0) {  // TODO Auto-generated method stub  }  @Override  public void finishUpdate(View arg0) {  // TODO Auto-generated method stub  }  } // 指引页面更改事件监听器,左右滑动图片时候,小圆点变换显示当前图片位置class GuidePageChangeListener implements OnPageChangeListener {  @Override  public void onPageScrollStateChanged(int arg0) {  // TODO Auto-generated method stub  }  @Override  public void onPageScrolled(int arg0, float arg1, int arg2) {  // TODO Auto-generated method stub  }  @Override  public void onPageSelected(int arg0) {  currentIndex = arg0;for (int i = 0; i < imageViews.length; i++) {  imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused);if (arg0 != i) {  imageViews[i].setBackgroundResource(R.drawable.page_indicator);  }  }}  }
}

啊~到这里就都实现了~

android仿新浪引导界面相关推荐

  1. android 仿相册,Android 仿新浪相册选择器 PhotoSelector

    软件介绍 仿新浪相册选择器,支持相册选择.视频选择 一.使用方法 1.选择相册.支持拍照 启动PhotoSelectorActivity并传入已选照片路径List.若包含已选照片路径则被选照片会被选I ...

  2. 仿新浪抢工长装修招标网站源码老工长装修网源码装修网站源码

    仿新浪抢工长装修招标网站源码 老工长装修网源码 装修网站源码 源码虽然不大但是没有错版,测试运行都是很正常的.希望大家能喜欢. 源码里面的配图我都没有改,很多失效的图大家可以自行去添加... 下载链接 ...

  3. 仿新浪抢工长装修招标网站源码

    仿新浪抢工长装修招标网站源码 老工长装修网源码 装修网站源码 强大的装修装潢公司网站源码,功能很全,有易于管理的后台,和页面的精美.后台功能强大,带会员系统,可以完整商业运营. 源码虽然不大但是没有错 ...

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

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

  5. Android仿IOS解锁密码界面-自定义view系列(6)

    Android仿IOS解锁密码界面-自定义view系列 功能简介 主要实现步骤-具体内容看github项目里的代码 xml相关属性设置 Android Studio 代码 Android技术生活交流 ...

  6. android仿支付提现功能,Android应用开发Android 仿微信支付密码界面

    本文将带你了解Android应用开发Android 仿微信支付密码界面,希望本文对大家学Android有所帮助. 使用 Bundle bundle = new Bundle(); bundle.put ...

  7. Android仿酷狗SlidingMenuLayout界面实现

    引言 该SlidingMenuLayout主要实现了左边侧边栏.主界面和多个Fragment功能.该控件主要是参考酷狗界面的功能,左侧菜单可设置缩放动画,及打开多个Fragment功能.该控件在后期会 ...

  8. Android仿微信语音聊天界面设计

    这篇文章主要为大家详细介绍了Android仿微信语音聊天界面设计代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 有段时间没有看视频了,昨天晚上抽了点空时间,又看了下鸿洋大神的视频教程,又抽时间 ...

  9. DOM--操作元素案例:分时显示不同的图片以及问候语;仿淘宝关闭标签案例;隐藏显示文本框内容;仿新浪注册页面中密码长度的判定

    分时显示不同的图片以及问候语 分析: 根据不同的时间来判断,所以需要获取到系统的时间. 利用分支语言来设置不同的图片 需要更换不同的图片,因此需要操作img的元素src 需要一个div来显示不同问候语 ...

最新文章

  1. C#零碎知识点笔记(容易混淆的一些点)
  2. 有人用这个表情包,被腾讯起诉了!
  3. 综述|深度学习在SLAM定位与建图中的应用(近250篇参考文献)_3D视觉工坊的博客-CSDN博客
  4. You must define TF_LIB_GTL_ALIGNED_CHAR_ARRAY for your compiler
  5. 组件赋值——@Value  ---@PropertySource(value={“classpath:/person.properties“})
  6. Java实现十进制数转十六进制数
  7. 微软免费软件项目DreamSpark更名为Microsoft Imagine
  8. python绝对值函数偏码_绝对值python
  9. 坚果nuts 加速 官网_坚果?R2?正式发布:延续经典设计,提供旗舰性能,而且是“下一代电脑”...
  10. Java高级程序猿技术积累
  11. C#: using JsonReader avoid Deserialize Json to dynamic
  12. android 创建typeface 对象,java – 检查Android中的Typeface对象的族
  13. 关于c# 静态构造函数的说明
  14. Julia学习01——Julia安装与卸载
  15. Tor去匿名化?俄罗斯联邦安全局秘密项目因承包商被入侵遭曝光
  16. 软件项目工程中应该编写的十三类文档
  17. 【NLP】NLP基础知识
  18. 对话阿里云张建锋:云计算正在内卷吗?丨钛度专访
  19. 【Unity实战100例】Unity屏幕画线,Unity屏幕画图HSJ绘画工具
  20. Win10杀毒软件大PK:Defender垫底 卡巴/小红伞第一

热门文章

  1. 学校计算机机房台账,机房工作
  2. 交换机短路_交换机日常怎么运行维护?一文告诉你
  3. php ajax 懒加载demo,lazyload懒加载,怎么支持ajax获得的新内容?
  4. CSS基础——CSS字体样式属性【学习笔记】
  5. H5测试是怎么做的?
  6. 软件测试职业发展-王学丹
  7. docker创建镜像之Dockerfile
  8. jenkins配置节点为windows代理
  9. “支付功能”怎么测试?
  10. java中调用数组参数_java中如何调用带有数组类型参数的存储过程