0
回答
模仿美团团购第一次使用时候的引导界面(有动画效果图)
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

实现方式: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>

 

 

 


原文链接:http://www.cnblogs.com/vus520/archive/2011/11/03/2561945.html
<无标签>
举报
长平狐
发帖于5年前 0回/595阅
顶部