• 模仿美团团购第一次使用时候的引导界面(有动画效果图)


    实现方式:ViewPager+PopupWindow。背景是透明的,先看下效果

    进入程序后会以动画的方式弹出引导界面,可以左右横向拖动,在最后一张图片的立即体验上触摸后可以关闭引导,回到主界面

    package com.zj.popupwindow2;
     
    import java.util.ArrayList;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.os.Parcelable;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.util.Log;
    import android.view.Gravity;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.PopupWindow;
    import android.widget.TextView;
    import android.widget.Toast;
    /**
     * 用PopupWindow实现程序第一次安装的引导功能
     * @author zj
     * 2012-5-25 上午11:04:11
     */
    public class MainActivity extends Activity {
            private ViewPager mViewPager;
            private ArrayList<View> mViews;
            private PopupWindow mPopupWindow;
            private View mPopupView;
            private MyHandler mMyHandler;
            private LinearLayout mIndicatorLayout;        //用来装小圆点的Linearlayout
            private ArrayList<ImageView> mIndicatorList;//装小圆点的集合
             
            private class MyHandler extends Handler{
                    @Override
                    public void handleMessage(Message msg) {
                            super.handleMessage(msg);
                             
                            switch (msg.what) {
                            case 9:
                                    /*
                                     * 这里必须用handler来延迟启动不然会报异常
                                     * android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
                                     */
                                    mPopupWindow.setAnimationStyle(R.style.anim);
                                    mPopupWindow.showAtLocation(findViewById(R.id.txt_Activity), Gravity.CENTER, 0, 0);
                                    break;
                            default:
                                    break;
                            }
                    }
            }
             
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
             
            mMyHandler = new MyHandler();
            mIndicatorList = new ArrayList<ImageView>();
             
            iniView();
            iniViewPager();        //初始化ViewPager
             
             
            new Thread(new Runnable() {
                            @Override
                            public void run() {
                                    mMyHandler.sendEmptyMessageDelayed(9, 200);
                            }
                    }).start();
             
        }
         
            private void iniView() {
                    mPopupView = getLayoutInflater().inflate(R.layout.popupwindow, null);
                    mViewPager = (ViewPager)mPopupView.findViewById(R.id.pager);
                     
                    //包裹小圆点的LinearLayout
                    mIndicatorLayout = (LinearLayout)mPopupView.findViewById(R.id.indicatorLayout);
                     
                    mPopupWindow = new PopupWindow(
                                    mPopupView, 
                                    LayoutParams.MATCH_PARENT, 
                                    LayoutParams.MATCH_PARENT, 
                                    true
                    );
            }
            private void iniViewPager() {
                    View v1 =  getLayoutInflater().inflate(R.layout.layout_1, null);
                    View v2 =  getLayoutInflater().inflate(R.layout.layout_2, null);
                    View v3 =  getLayoutInflater().inflate(R.layout.layout_3, null);
                    View v4 =  getLayoutInflater().inflate(R.layout.layout_4, null);
                    View v5 =  getLayoutInflater().inflate(R.layout.layout_5, null);
                    View v6 =  getLayoutInflater().inflate(R.layout.layout_6, null);
                    View v7 =  getLayoutInflater().inflate(R.layout.layout_7, null);
                     
                    ImageView img1 = (ImageView)v1.findViewById(R.id.img);
                    ImageView img2 = (ImageView)v2.findViewById(R.id.img2);
                    ImageView img3 = (ImageView)v3.findViewById(R.id.img3);
                    ImageView img4 = (ImageView)v4.findViewById(R.id.img4);
                    ImageView img5 = (ImageView)v5.findViewById(R.id.img5);
                    ImageView img6 = (ImageView)v6.findViewById(R.id.img6);
                    ImageView img7 = (ImageView)v7.findViewById(R.id.img7);
                     
                    //设置图片透明度
                    img1.setAlpha(180);
                    img2.setAlpha(180);
                    img3.setAlpha(180);
                    img4.setAlpha(180);
                    img5.setAlpha(180);
                    img6.setAlpha(180);
                    img7.setAlpha(180);
                     
                    //点击最后一张图片的立即体验后退出
                    TextView start = (TextView)v7.findViewById(R.id.txt_start);
                    start.setOnClickListener(new OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                    // TODO Auto-generated method stub
                                    Toast.makeText(MainActivity.this, "开始体验", 1).show();
                                    mPopupWindow.dismiss();
                            }
                    });
                     
                    mViews = new ArrayList<View>();
            mViews.add(v1);
            mViews.add(v2);
            mViews.add(v3);
            mViews.add(v4);
            mViews.add(v5);
            mViews.add(v6);
            mViews.add(v7);
             
            //设置适配器
            mViewPager.setAdapter(new MyPagerAdapter());
            //设置监听事件
            mViewPager.setOnPageChangeListener(new MyPagerChangeListener());
             
            //加入小圆点
            for (int i = 0; i < mViews.size(); i++) {
                    ImageView indicator = new ImageView(this);
                    if (i == 0) {
                            indicator.setImageResource(R.drawable.page_indicator_focused);
                            }else {
                                    indicator.setImageResource(R.drawable.page_indicator);
                            }
                     
                    indicator.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                     
                    mIndicatorLayout.addView(indicator);
                    //把小圆点图片存入集合,好让切换图案片的时候动态改变小圆点背景
                mIndicatorList.add(indicator);
                    }
             
            }
             
            private class MyPagerAdapter extends PagerAdapter{
     
                    @Override
                    public void destroyItem(View arg0, int arg1, Object arg2) {
                            ((ViewPager)arg0).removeView(mViews.get(arg1));
                    }
     
                    @Override
                    public void finishUpdate(View arg0) {
                             
                    }
     
                    @Override
                    public int getCount() {
                            return mViews.size();
                    }
     
                    @Override
                    public Object instantiateItem(View arg0, int arg1) {
                            ((ViewPager)arg0).addView(mViews.get(arg1));
                            return mViews.get(arg1);
                    }
     
                    @Override
                    public boolean isViewFromObject(View arg0, Object arg1) {
                            return arg0 == arg1;
                    }
     
                    @Override
                    public void restoreState(Parcelable arg0, ClassLoader arg1) {
                            for (int i = 0; i < mViews.size(); i++) {
                                     
                            }
                    }
     
                    @Override
                    public Parcelable saveState() {
                            return null;
                    }
     
                    @Override
                    public void startUpdate(View arg0) {
                             
                    }
            }
             
            private class MyPagerChangeListener 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 position) {
                            Log.i("zj", "onPagerChange position="+position);
                            for (int i = 0; i < mViews.size(); i++) {
                                    mIndicatorList.get(i).setImageResource(R.drawable.page_indicator);
                            }
                            mIndicatorList.get(position).setImageResource(R.drawable.page_indicator_focused);
                    }
                     
            }
    }

    XML:
    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/linearLayout"
        >
        <TextView
                android:id="@+id/txt_Activity"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Activity"
                android:textSize="80sp"
                android:gravity="center"
                android:background="#33b5e5"
                android:textColor="#ffffff"
        />
    </LinearLayout>

    popupwindow.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="#a0000000">
        <android.support.v4.view.ViewPager
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/pager"
        />
        <LinearLayout
                android:id="@+id/indicatorLayout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="20dp"
        />
    </RelativeLayout>
  • 相关阅读:
    需要我们了解的SQL Server阻塞原因与解决方法
    SQL Server应用模式之OLTP系统性能分析
    第一章 scala环境搭建
    IO
    装饰器模式
    java 泛型方法
    文件格式转换
    spring ioc
    深入浅出Java模式设计之模板方法模式
    struts2
  • 原文地址:https://www.cnblogs.com/vus520/p/2561945.html
Copyright © 2020-2023  润新知