最近在研究如何做出仿微信,仿新浪等应用,第一次安装使用的使用展示应用程序的新特性和用法。
实现功能:左右手势滑屏
底部小圆点随当前显示页跳动
浮动按钮显示。当触屏事件发生显示,否则就渐渐消失
第一种: ViewFlipper + GestureDetector
第二种: ActivityGroup + GestureDetector
第三种: ViewPager (Android3.0+)
第四种: ViewFlow (开源项目)
话不多说,先放上效果图
向右滑动,或者点击按钮向右![[置顶] android 引导界面的设计_第2张图片](http://img.e-com-net.com/image/info5/eb6796df7a9a4044b218daa8b383c71c.jpg)
怎么样,是不是很心动~~~!哈哈、
实现左右滑屏是需要一个叫做ViewPager的东西。具体ViewPager怎么用我就不赘述了。(PS注意导入ViewPager的兼容包)
接下来是代码:
首先在main.xml中声明ViewPager:
[html] view plaincopyprint?
- <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>
<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"/>
</LinearLayout>
[html] view plaincopyprint?
- 和一个viewGroup放小圆点
和一个viewGroup放小圆点
[html] view plaincopyprint?
- <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>
<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中放置要显示的图片,因为几个都一样,就不都贴上来了。
[html] view plaincopyprint?
- <ImageView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@drawable/feature_guide_0" >
-
- </ImageView>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/feature_guide_0" >
</ImageView>
接下来是核心代码:
[java] view plaincopyprint?
- public class GuideViewActivity extends Activity {
-
-
- private ViewPager viewPager;
- private ArrayList<View> pageViews;
- private ImageView imageView;
- private ImageView[] imageViews;
-
- private ViewGroup main;
-
- private ViewGroup group;
-
- private ImageView imageViewLeft;
-
- private ImageView imageViewRight;
-
- private int currentIndex;
-
-
- private int mAlpha = 0;
- private boolean isHide;
-
-
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
-
- super.onCreate(savedInstanceState);
-
-
- LayoutInflater inflater = getLayoutInflater();
- pageViews = new ArrayList<View>();
- pageViews.add(inflater.inflate(R.layout.item01, null));
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));
[java] view plaincopyprint?
- ...
...
[java] view plaincopyprint?
- 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);
-
-
- 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) {
-
- 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) {
-
- return super.getItemPosition(object);
- }
-
- @Override
- public void destroyItem(View arg0, int arg1, Object arg2) {
-
- ((ViewPager) arg0).removeView(pageViews.get(arg1));
- }
-
- @Override
- public Object instantiateItem(View arg0, int arg1) {
-
- ((ViewPager) arg0).addView(pageViews.get(arg1));
- return pageViews.get(arg1);
- }
-
- @Override
- public void restoreState(Parcelable arg0, ClassLoader arg1) {
-
-
- }
-
- @Override
- public Parcelable saveState() {
-
- return null;
- }
-
- @Override
- public void startUpdate(View arg0) {
-
-
- }
-
- @Override
- public void finishUpdate(View arg0) {
-
-
- }
- }
-
-
- class GuidePageChangeListener implements OnPageChangeListener {
-
- @Override
- public void onPageScrollStateChanged(int arg0) {
-
-
- }
-
- @Override
- public void onPageScrolled(int arg0, float arg1, int arg2) {
-
-
- }
-
- @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);
- }
- }
- }
- }