android仿新浪引导界面
最近在研究如何做出仿微信,仿新浪等应用,第一次安装使用的使用展示应用程序的新特性和用法。
实现功能:左右手势滑屏
底部小圆点随当前显示页跳动
浮动按钮显示。当触屏事件发生显示,否则就渐渐消失
先转个文章:http://blog.csdn.net/feng88724/article/details/6973662
第一种: ViewFlipper + GestureDetector
第二种: ActivityGroup + GestureDetector
第三种: ViewPager (Android3.0+)
第四种: ViewFlow (开源项目)
话不多说,先放上效果图
向右滑动,或者点击按钮向右
怎么样,是不是很心动~~~!哈哈、
实现左右滑屏是需要一个叫做ViewPager的东西。具体ViewPager怎么用我就不赘述了。(PS注意导入ViewPager的兼容包)
接下来是代码:
首先在main.xml中声明ViewPager:
- <LinearLayout
- android:id="@+id/linearLayout01"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <android.support.v4.view.ViewPager
- android:id="@+id/guidePages"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
- lt;/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中放置要显示的图片,因为几个都一样,就不都贴上来了。
- <ImageView
- android: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;
- // 包裹滑动图片LinearLayout
- private ViewGroup main;
- // 包裹小圆点的LinearLayout
- private 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. */
- @Override
- public 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{
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- int showNext=0;
- if(v.getId() == R.id.imageView1) {
- System.out.println("点击了向左的按钮");
- if(currentIndex ==0 )
- showNext = currentIndex;
- else
- showNext = currentIndex-1;
- viewPager.setCurrentItem(showNext);
- }
- if(v.getId() == R.id.imageView2){
- System.out.println("点击了向右的按钮");
- if(currentIndex == imageViews.length)
- showNext = currentIndex;
- else
- showNext = 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();
- }
- @Override
- public 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仿新浪引导界面的更多相关文章
- Android仿新浪新闻SlidingMenu界面的实现 .
先看看原图: 如图所示,这种侧滑效果以另一种方式替代了原先tab导航的那种用户体验方式 给人耳目一新的感觉,现已被广大知名应用所效仿,如新浪新闻,网易新闻,人人网等 那么这种效果该如何实现呢?那就需要 ...
- jquery实现隐藏显示层动画效果、仿新浪字符动态输入、tab效果
已经有两年多没登陆csdn账号了,中间做了些旁的事,可是现在却还是回归程序,但改做前端了,虽然很多东西都已忘得差不多了,但还是应该摆正心态,慢慢来,在前端漫游,做一只快乐双鱼. 路是一步一步走出来的, ...
- 仿新浪首页、主题、详情页,纯html静态页面
仿新浪首页.主题.详情页.纯html静态页面,下载地址: http://download.csdn.net/detail/sweetsuzyhyf/8085535
- android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)
首先我们还是看一些示例:(网易,新浪,百度) 显示效果都不错,可是手感就不一样了,百度最棒,网易还行,新浪就操作很不好,这里我说的是滑动切换图片.自己可以测试一下.不得不说牛叉的公司确实有哦牛叉的道理 ...
- 【转】Android android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)
首先我们还是看一些示例:(网易,新浪,百度) 下面我简单的介绍下实现方法:其实就是listview addHeaderView.只不过这个view是一个可以切换图片的view,至于这个vie ...
- android——利用SharedPreference做引导界面
很久以前就接触过sharedPreference这个android中的存储介质.但是一直没有实际使用过,今天在看之前做的“民用机型大全”的app时,突然想到可以使用sharedPreference类来 ...
- 转-Android仿微信气泡聊天界面设计
微信的气泡聊天是仿iPhone自带短信而设计出来的,不过感觉还不错可以尝试一下仿着微信的气泡聊天做一个Demo,给大家分享一下!效果图如下: 气泡聊天最终要的是素材,要用到9.png文件的素材,这样气 ...
- Android仿微信气泡聊天界面设计
微信的气泡聊天是仿iPhone自带短信而设计出来的,不过感觉还不错可以尝试一下仿着微信的气泡聊天做一个Demo,给大家分享一下!效果图如下: 气泡聊天最终要的是素材,要用到9.png文件的素材,这样气 ...
- Android -- 仿小红书欢迎界面
1,觉得小红书的欢迎界面感觉很漂亮,就像来学习学习一下来实现类似于这种效果 原效果图如下: 2,根据效果我们来一点点分析 第一步:首先看一下我们的主界面布局文件视图效果如下: main_activi ...
随机推荐
- 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 ...
- oled模块的驱动芯片和pcb图
参考自:http://blog.sina.com.cn/s/blog_57ad1bd20102wtq8.html oled的驱动芯片是:SSD1306驱动芯片,这个芯片嵌入在屏幕里面,从外面看不出来, ...
- (素材源代码) 猫猫学IOS(五)UI之360等下载管理器九宫格UI
猫猫分享,必须精品 先看效果 代码学习地址: 猫猫学IOS(五)UI之360等下载管理器九宫格UI 猫猫学IOS(五)UI之360等下载管理器九宫格UI http://blog.csdn.net/u0 ...
- vc6.0 点编译时提示Cannot complile the file 'D:\souce-code\vc-workspace\对话框\MainFrm.h'; no compile tool is
问题描写叙述: vc6.0程序,点击编译时提示对话框,内容为: Cannot complile the file 'D:\souce-code\vc-workspace\对话框\MainFrm.h'; ...
- python的sorted() 函数
摘自:http://www.runoob.com/python/python-func-sorted.html sortedClassCount=sorted(classCount.items(),k ...
- 【习题 5-11 UVA 12504 】Updating a Dictionary
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 不确定某个map里面是否有某个关键字的时候. 要用find来确定. 如果直接用访问下标的形式去做的话. 会强行给他加一个那个关键字( ...
- php课程 2-7 php中常量如何定义
php课程 2-7 php中常量如何定义 一.总结 一句话总结:函数方式定义和普通变量方式定义 define('PI','3.14').键值对,和session一样. const PI=3 ...
- vue-cli3使用vue-svg-loader加载svg
vue-svg-loader Documentation - FAQ webpack loader that lets you use SVG files as Vue components Micr ...
- 18.1 IIC驱动程序(基于3.4.2内核)
驱动使用smbus提供的IIC读写函数可以参考smbus-protocol.txt文档:应用层直接使用IIC读写函数读写IIC设备,应用层读写函数是由i2c-tools这个库提供的(编译的使用和应用程 ...
- perl对比两个文件的行
perl对比两个文件的行 对比两个文件的各行,得到A与B相同的行/A与B不相同的行 主要功能 得到相同行 得到A中包含,B不包含的行 得到B中包含,A中不包含的行 具体执行情况 Perl代码 #!/u ...