Android UI设计与开发之ViewPager仿微信引导界面以及动画效果

基于前两篇比较简单的实例做铺垫之后,这一篇我们来实现一个稍微复杂一点的引导界面的效果,当然也只是稍微复杂了一点,对于会的人来说当然还是so easy!正所谓会者不难,难者不会,大概说的就是这个意思了吧。好的,话不多说,回归正题。

这篇要实现的是一个仿微信的动画效果,虽然这种效果的实现在网上到处都有,但是我还是想站在中低端开发者的角度去告诉大家是如何实现的,当然实现的方式有很多,我也只是列出了我认为实现起来比较方便的一种方法,希望大家能够受用。

一、实现的效果图

有图才有真相,上图先:

点击按钮后出现动画效果,然后进入到另一个界面:

二 、程序的目录结构

三、具体的编码实现

1、  在主布局界面中加入ViewPager组件,以及底部的小点,activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" > 

 <android.support.v4.view.ViewPager
 android:id="@+id/viewpager"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent" /> 

 <LinearLayout
 android:id="@+id/ll"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true"
 android:layout_centerHorizontal="true"
 android:layout_marginBottom="24.0dip"
 android:orientation="horizontal" > 

 <ImageView
  android:id="@+id/page0"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_vertical"
  android:clickable="true"
  android:padding="5dip"
  android:src="@drawable/page_indicator_focused" /> 

 <ImageView
  android:id="@+id/page1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_vertical"
  android:clickable="true"
  android:padding="5dip"
  android:src="@drawable/page_indicator_unfocused" /> 

 <ImageView
  android:id="@+id/page2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_vertical"
  android:clickable="true"
  android:padding="5dip"
  android:src="@drawable/page_indicator_unfocused" /> 

 <ImageView
  android:id="@+id/page3"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_vertical"
  android:clickable="true"
  android:padding="5dip"
  android:src="@drawable/page_indicator_unfocused" /> 

 <ImageView
  android:id="@+id/page4"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_vertical"
  android:clickable="true"
  android:padding="5dip"
  android:src="@drawable/page_indicator_unfocused" /> 

 <ImageView
  android:id="@+id/page5"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_vertical"
  android:clickable="true"
  android:padding="5dip"
  android:src="@drawable/page_indicator_unfocused" />
 </LinearLayout>
</RelativeLayout> 

2、接着在guide_view01.xml等几个布局页面中添加引导界面要显示的图片和控件,因为这几个布局界面都大同小异,所以在这里我就不一一贴出来了吧,有需要的同学可以直接下载源码,guide_view01.xml:

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:background="@drawable/w01"
 android:orientation="vertical" > 

 <TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_alignParentTop="true"
 android:layout_marginTop="35dp"
 android:gravity="center"
 android:text="@string/guide_text01"
 android:textColor="@color/TextColor"
 android:textSize="22sp" />
</RelativeLayout> 

3、然后是要实现动画效果的布局界面,guide_door.xml:

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent" > 

 <ImageView
 android:id="@+id/imageLeft"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:layout_alignParentLeft="true"
 android:scaleType="fitXY"
 android:src="@drawable/w_left" /> 

 <ImageView
 android:id="@+id/imageRight"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:layout_alignParentRight="true"
 android:scaleType="fitXY"
 android:src="@drawable/w_right"
 android:visibility="visible" /> 

 <TextView
 android:id="@+id/anim_text"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_alignParentTop="true"
 android:layout_marginTop="35dp"
 android:gravity="center"
 android:text=" \n \n微信,是一个生活方式\n \n "
 android:textColor="#fff"
 android:textSize="22sp" />
</RelativeLayout>

4、最后是完成动画效果之后进入的布局界面,activity_other.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" > 

 <TextView
 android:id="@+id/textView1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="亲,可以开始你的微信生活了!" />
</LinearLayout>

5、在这里还要创建一个xml文件来实现自定义按钮的效果,关于自定义按钮的效果实现我会在后面的文章中专题详细介绍,这里就不在赘述,start_weixin_btn.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_enabled="true" android:state_pressed="true"
 android:drawable="@drawable/whatsnew_btn_pressed" /> <!--按下时的效果-->  

 <item android:state_enabled="true" android:drawable="@drawable/whatsnew_btn_nor" /> <!--正常状态的效果-->
</selector> 

6、布局界面已经讲解完毕,接下来让我们进行详细的代码讲解,ViewPager适配器代码,ViewPagerAdapter.java:

package com.yangyu.myguideview02; 

import java.util.ArrayList; 

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View; 

/**
 * @author yangyu
 * 功能描述:ViewPager适配器,用来绑定数据和view
 */
public class ViewPagerAdapter extends PagerAdapter { 

 //界面列表
 private ArrayList<View> views; 

 public ViewPagerAdapter (ArrayList<View> views){
 this.views = views;
 } 

 /**
 * 获得当前界面数
 */
 @Override
 public int getCount() {
  if (views != null) {
  return views.size();
  }
  return 0;
 } 

 /**
 * 初始化position位置的界面
 */
 @Override
 public Object instantiateItem(View view, int position) { 

 ((ViewPager) view).addView(views.get(position), 0); 

 return views.get(position);
 } 

 /**
 * 判断是否由对象生成界面
 */
 @Override
 public boolean isViewFromObject(View view, Object arg1) {
 return (view == arg1);
 } 

 /**
 * 销毁position位置的界面
 */
 @Override
 public void destroyItem(View view, int position, Object arg2) {
 ((ViewPager) view).removeView(views.get(position));
 }
} 

7、主程序入口activity类,MainActivity.java:

package com.yangyu.myguideview02; 

import java.util.ArrayList; 

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView; 

/**
 * @author yangyu
 * 功能描述:主程序入口activity
 */
public class MainActivity extends Activity {
 // 定义ViewPager对象
 private ViewPager viewPager; 

 // 定义ViewPager适配器
 private ViewPagerAdapter vpAdapter; 

 // 定义一个ArrayList来存放View
 private ArrayList<View> views; 

 //定义各个界面View对象
 private View view1,view2,view3,view4,view5,view6; 

 // 定义底部小点图片
 private ImageView pointImage0, pointImage1, pointImage2, pointImage3,pointImage4, pointImage5; 

 //定义开始按钮对象
 private Button startBt; 

 // 当前的位置索引值
 private int currIndex = 0; 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main); 

 initView(); 

 initData();
 } 

 /**
 * 初始化组件
 */
 private void initView() {
 //实例化各个界面的布局对象
 LayoutInflater mLi = LayoutInflater.from(this);
 view1 = mLi.inflate(R.layout.guide_view01, null);
 view2 = mLi.inflate(R.layout.guide_view02, null);
 view3 = mLi.inflate(R.layout.guide_view03, null);
 view4 = mLi.inflate(R.layout.guide_view04, null);
 view5 = mLi.inflate(R.layout.guide_view05, null);
 view6 = mLi.inflate(R.layout.guide_view06, null); 

 // 实例化ViewPager
 viewPager = (ViewPager) findViewById(R.id.viewpager); 

 // 实例化ArrayList对象
 views = new ArrayList<View>(); 

 // 实例化ViewPager适配器
 vpAdapter = new ViewPagerAdapter(views); 

 // 实例化底部小点图片对象
 pointImage0 = (ImageView) findViewById(R.id.page0);
 pointImage1 = (ImageView) findViewById(R.id.page1);
 pointImage2 = (ImageView) findViewById(R.id.page2);
 pointImage3 = (ImageView) findViewById(R.id.page3);
 pointImage4 = (ImageView) findViewById(R.id.page4);
 pointImage5 = (ImageView) findViewById(R.id.page5); 

 //实例化开始按钮
 startBt = (Button) view6.findViewById(R.id.startBtn);
 } 

 /**
 * 初始化数据
 */
 private void initData() {
 // 设置监听
 viewPager.setOnPageChangeListener(new MyOnPageChangeListener());
 // 设置适配器数据
 viewPager.setAdapter(vpAdapter); 

 //将要分页显示的View装入数组中
 views.add(view1);
 views.add(view2);
 views.add(view3);
 views.add(view4);
 views.add(view5);
 views.add(view6); 

 // 给开始按钮设置监听
 startBt.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
   startbutton();
  }
 });
 } 

 public class MyOnPageChangeListener implements OnPageChangeListener {
 @Override
 public void onPageSelected(int position) {
  switch (position) {
  case 0:
  pointImage0.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
  pointImage1.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
  break;
  case 1:
  pointImage1.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
  pointImage0.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
  pointImage2.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
  break;
  case 2:
  pointImage2.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
  pointImage1.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
  pointImage3.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
  break;
  case 3:
  pointImage3.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
  pointImage4.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
  pointImage2.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
  break;
  case 4:
  pointImage4.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
  pointImage3.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
  pointImage5.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
  break;
  case 5:
  pointImage5.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
  pointImage4.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
  break;
  }
  currIndex = position;
  // animation.setFillAfter(true);// True:图片停在动画结束位置
  // animation.setDuration(300);
  // mPageImg.startAnimation(animation);
 } 

 @Override
 public void onPageScrollStateChanged(int arg0) { 

 } 

 @Override
 public void onPageScrolled(int arg0, float arg1, int arg2) { 

 }
 } 

 /**
 * 相应按钮点击事件
 */
 private void startbutton() {
 Intent intent = new Intent();
 intent.setClass(MainActivity.this,GuideViewDoor.class);
 startActivity(intent);
 this.finish();
 } 

}

PS:在这段代码中,有个地方需要注意,尽管我们写代码的时候一直很小心,但还是避免不了会犯一些低级的错误,以至于调试耽误了时间

//实例化开始按钮
startBt = (Button) view6.findViewById(R.id.startBtn);

这是最后一个布局界面中的一个开始按钮,由于在findvViewById()方法前面忘记使用了view6来调用该方法,以至于模拟器报出空指针异常。

8、实现动画效果的入口activity类,在这个类中主要实现了点击开始按钮后实现一个动画效果来达到进入另一个界面的目的,该类中的主要使用了动画类。我会在后面的章节中以专题的形式来介绍动画这一块的类容,所以这里也不再赘述,

GuideViewDoor.Java:

package com.yangyu.myguideview02; 

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView; 

/**
 * @author yangyu
 * 功能描述:实现动画效果的入口activity
 */
public class GuideViewDoor extends Activity { 

 //定义左右两张图片对象
 private ImageView mLeft,mRight; 

 //定义一个文本对象
 private TextView mText; 

 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.guide_door); 

 //实例化对象
 mLeft = (ImageView)findViewById(R.id.imageLeft);
 mRight = (ImageView)findViewById(R.id.imageRight);
 mText = (TextView)findViewById(R.id.anim_text); 

 //实例化动画对象
 AnimationSet anim = new AnimationSet(true);
 //实例化位移动画对象
 TranslateAnimation mytranslateanim = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,-1f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0f);
 //设置动画持续时间
 mytranslateanim.setDuration(2000);
 //设置启动时间
 anim.setStartOffset(800);
 //将位移动画添加进动画效果中
 anim.addAnimation(mytranslateanim);
 //动画结束后,保留在终止位
 anim.setFillAfter(true);
 //左边图启动该动画效果
 mLeft.startAnimation(anim); 

 AnimationSet anim1 = new AnimationSet(true);
 TranslateAnimation mytranslateanim1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,+1f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0f);
 mytranslateanim1.setDuration(1500);
 anim1.addAnimation(mytranslateanim1);
 anim1.setStartOffset(800);
 anim1.setFillAfter(true);
 mRight.startAnimation(anim1); 

 AnimationSet anim2 = new AnimationSet(true);
 ScaleAnimation myscaleanim = new ScaleAnimation(1f,3f,1f,3f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
 myscaleanim.setDuration(1000);
 AlphaAnimation myalphaanim = new AlphaAnimation(1,0.0001f);
 myalphaanim.setDuration(1500);
 anim2.addAnimation(myscaleanim);
 anim2.addAnimation(myalphaanim);
 anim2.setFillAfter(true);
 mText.startAnimation(anim2); 

 new Handler().postDelayed(new Runnable(){
  @Override
  public void run(){
  Intent intent = new Intent (GuideViewDoor.this,OtherActivity.class);
  startActivity(intent);
  GuideViewDoor.this.finish();
  }
 }, 2300);
 }
}

9、最后是另一个activity类,我为了只是达到进入到另一个界面的这种效果,所以代码比较简单,就是调用了一个layout布局页面,OtherActivity.java:

package com.yangyu.myguideview02; 

import android.app.Activity;
import android.os.Bundle; 

/**
 * @author yangyu
 * 功能描述:另一个activity
 */
public class OtherActivity extends Activity { 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_other);
 }
}

10、最后大家别忘了在AndroidManifest.xml清单文件中为程序添加GuideViewDoor、OtherActivity这两个activity,否则会报出异常。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android绘制炫酷的引导界面

    先看一下我们要开发的界面(三张图片,滑到最后一个会出现开始体验的Button,下面的小红点会跟着一起滑动): 首先看一下布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.and

  • 很赞的引导界面效果Android控件ImageSwitcher实现

    本文实例为大家分享了Android控件ImageSwitcher实现引导界面的代码,供大家参考,具体内容如下 效果图: 布局代码: <?xml version="1.0" encoding="UTF-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent&

  • Android UI设计与开发之实现应用程序只启动一次引导界面

    这篇文章算是对整个引导界面开发专题的一个终结了吧,个人觉得大部分的引导界面基本上都是千篇一律的,只要熟练掌握了一个,基本上也就没什么好说的了,要是在今后的开发中遇到了更好玩,更有趣的引导界面,博主也会在这里及时的跟大家分享,今天的内容主要是教大家的应用程序只有在第一次启动的时候显示引导界面,以后在启动程序的时候就不再显示了. 其实要想实现这样的效果,只要使用SharedPreferences类,就会让程序变的非常简单,下面来详细介绍一下这个类的使用方法 一.SharedPreferences的详

  • android 引导界面的实现方法

    复制代码 代码如下: /** * 实现 * @author dujinyang * */ 顺序是: OneAcitivity  -->MainActivity -> TwoActivity 然后第2次进去就是:OneActivity -> TwoActivity 代码里都有注释的了,这里就不多说了.OneActivity的代码如下: [java] 复制代码 代码如下: package cn.djy.activity; import android.app.Activity; import

  • Android利用ViewPager实现用户引导界面效果的方法

    本文实例讲述了Android利用ViewPager实现用户引导界面效果.分享给大家供大家参考,具体如下: 我相信有很多朋友在装完软件首次打开时,有很多软件都有一个软件功能介绍, 例如刚装完微信打开它,有很多介绍微信功能的图片,并且在屏幕下方有很多小圆点提示你当前图片的位置. 今天我就来实现这么个功能 所实现的功能: 1.可以左右滑动功能图片. 2.图片的索引 看出当前图片所在的位置. 3.可循环滑动. 4.图片的索引带有动画效果. 本次学习主要是利用ViewPager实现用户引导界面 在这里,我

  • Android UI设计与开发之ViewPager介绍和简单实现引导界面

    做Android开发加起来差不多也有一年多的时间了,总是想写点自己在开发中的心得体会与大家一起交流分享.共同进步,刚开始写也不知该如何下手,仔细想了一下,既然是刚开始写,那就从一个软件给人最直观的感受--UI设计开始写起吧,循序渐进,娓娓道来.博主在这里和大家一起学习,希望能多多支持,话不多说,下面就开始讲解UI设计的第一篇. 在讲解如何实现引导界面的效果之前,我想先详细介绍一下ViewPager类的使用和说明,因为这是开发引导界面最重要的类,没有之一. 一.ViewPager实现的效果图 二.

  • Android UI设计与开发之仿人人网V5.9.2最新版引导界面

    这一篇我将会以人人网的引导界面为实例来展开详细的讲解,人人网的引导界面比较的新颖,不同于其他应用程序千篇一律的靠滑动来引导用户,而是以一个一个比较生动形象的动画效果展示在用户们的面前,有一种给人眼前一亮的感觉,话不多说,进入正题. 一.实现的效果图 欢迎界面: 引导界面1 引导界面 2 引导界面 3 二 .项目的目录结构 三.具体的编码实现 1.欢迎界面的xml布局,activity_welcome: <?xml version="1.0" encoding="utf-

  • Android绘制炫酷引导界面

    一个超炫的引导界面,分享给大家 代码: MainActivity.java package com.bzu.gxs.webview1; import android.app.Activity; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; import android.view.Men

  • Android UI设计与开发之ViewPager仿微信引导界面以及动画效果

    基于前两篇比较简单的实例做铺垫之后,这一篇我们来实现一个稍微复杂一点的引导界面的效果,当然也只是稍微复杂了一点,对于会的人来说当然还是so easy!正所谓会者不难,难者不会,大概说的就是这个意思了吧.好的,话不多说,回归正题. 这篇要实现的是一个仿微信的动画效果,虽然这种效果的实现在网上到处都有,但是我还是想站在中低端开发者的角度去告诉大家是如何实现的,当然实现的方式有很多,我也只是列出了我认为实现起来比较方便的一种方法,希望大家能够受用. 一.实现的效果图 有图才有真相,上图先: 点击按钮后

  • Android UI设计与开发之PopupWindow仿腾讯新闻底部弹出菜单

    前一篇文章中有用到 PopupWindow 来实现弹窗的功能.简单介绍以下吧. 官方文档是这样解释的:这就是一个弹出窗口,可以用来显示一个任意视图.出现的弹出窗口是一个浮动容器的当前活动. 1.首先来个简单的栗子,效果如下: 只有两个布局文件,一个是弹窗布局(只有一张图片),一个是主界面布局(只有一个按钮). 然后在主界面代码中实例 PopupWindow ,指定弹出的界面,在按钮点击事件中显示或隐藏弹窗就可以了,代码如下: package com.yanis.demo; import andr

  • Android UI设计系列之自定义ListView仿QQ空间阻尼下拉刷新和渐变菜单栏效果(8)

    好久没有写有关UI的博客了,刚刚翻了一下之前的博客,最近一篇有关UI的博客:Android UI设计系列之自定义Dialog实现各种风格的对话框效果(7) ,实现各种风格效果的对话框,在那篇博客写完后由于公司封闭开发封网以及其它原因致使博客中断至今,中断这么久很是惭愧,后续我会尽量把该写的都补充出来.近来项目有个需求,要做个和QQ空间类似的菜单栏透明度渐变和下拉刷新带有阻尼回弹的效果.于是花点时间动手试了试,基本上达到了QQ空间的效果,截图如下: 通过观察QQ空间的运行效果,发现当往上滚动时菜单

  • ViewPager+RadioGroup仿微信主界面

    话不多说,先上图,如图效果,可以点击底部按钮选择页面,也可以滑动页面进行选择. 那么我们下面就来实现一下吧. 首先创建工程WXTest,主界面布局使用ViewPager+RadioGroup来实现,界面代码如下. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo

  • Android UI设计系列之自定义ViewGroup打造通用的关闭键盘小控件ImeObserverLayout(9)

    转载请注明出处:http://blog.csdn.net/llew2011/article/details/51598682 我们平时开发中总会遇见一些奇葩的需求,为了实现这些需求我们往往绞尽脑汁有时候还茶不思饭不香的,有点夸张了(*^__^*)--我印象最深的一个需求是在一段文字中对部分词语进行加粗显示.当时费了不少劲,不过还好,这个问题最终解决了,有兴趣的童靴可以看一下:Android UI设计之<六>使用HTML标签,实现在TextView中对部分文字进行加粗显示. 之前产品那边提了这样

  • Android UI设计系列之自定义Dialog实现各种风格的对话框效果(7)

    虽然Android给我们提供了众多组件,但是使用起来都不是很方便,我们开发的APK都有自己的风格,如果使用了系统自带的组件,总是觉得和应用的主题不着边际并且看起来也不顺心,那我们就需要自定义了,为了方便大家对自定义组件的学习,我接下来准备了几遍有关自定义的Dialog的文章,希望对大家有帮助. 在开发APK中最常见的估计就数弹出对话框了,这种对话框按照按钮数量来分大致是三种:一个按钮,两个按钮,三个按钮.现在要讲的就是按照按钮数量分为以上三类吧(当然了可以有更多的按钮,只要你愿意). 自定义Di

  • Android仿微信主界面的实现方法

    本文实例为大家分享了Android模仿微信主界面展示的具体代码,供大家参考,具体内容如下 先看一下效果图 实现的原理: ViewPager+FragmentPagerAdapter 主界面可分为三部分: top标题栏就是一个TextView 中间的ViewPager作为显示的容器,填充Fragment bottom是一个RadioGroup 这里为了布局的优化,将top和bottom抽取出来 ,然后用include将其导入主布局,如下 <LinearLayout xmlns:android=&quo

  • Android用ActionBar高仿微信主界面的实例代码

    经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对较为深刻的理解了.唯一欠缺的是,前面我们都只是学习了理论知识而已,虽然知识点已经掌握了,但是真正投入到项目实战当中时会不会掉链子还很难说.那么不用担心,本篇文章我就将带领大家一起进入ActionBar的应用实战,将理论和实践完美结合到一起. 如果你还没有看过我的前两篇文章,建议先去阅读一下 Android ActionBar完全解析使用官方推荐的最佳导航栏(上)和 Android ActionBar完全解析使用官方推荐的最佳导航

随机推荐