android仿新浪引導界麵
最近在研究如何做出仿微信,仿新浪等應用,第一次安裝使用的使用展示應用程序的新特性和用法。
實現功能:左右手勢滑屏
底部小圓點隨當前顯示頁跳動
浮動按鈕顯示。當觸屏事件發生顯示,否則就漸漸消失
先轉個文章:https://blog.csdn.net/feng88724/article/details/6973662
第一種: ViewFlipper + GestureDetector
第二種: ActivityGroup + GestureDetector
第三種: ViewPager (Android3.0+)
第四種: ViewFlow (開源項目)
話不多說,先放上效果圖
向右滑動,或者點擊按鈕向右
怎麼樣,是不是很心動~~~!哈哈、
實現左右滑屏是需要一個叫做ViewPager的東西。具體ViewPager怎麼用我就不贅述了。(PS注意導入ViewPager的兼容包)
接下來是代碼:
首先在main.xml中聲明ViewPager:
<LinearLayout android: android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <android.support.v4.view.ViewPager android: android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout>
和一個viewGroup放小圓點
<LinearLayout android: 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); } } } } }
啊~到這裏就都實現了~
最後更新:2017-04-02 17:09:26