内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Android實(shí)現(xiàn)滑動側(cè)邊欄-創(chuàng)新互聯(lián)

在Android應(yīng)用開發(fā)中,滑動側(cè)邊欄經(jīng)常使用,今天我也試著自己進(jìn)行了一個簡單的實(shí)踐,雖然功能還不是很強(qiáng)大,但是可以保留下來為以后的開發(fā)使用,有需要時在進(jìn)行簡單的修改。實(shí)現(xiàn)一個滑動側(cè)邊欄思路也很簡單:

在田林等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計、成都做網(wǎng)站 網(wǎng)站設(shè)計制作專業(yè)公司,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站制作,田林網(wǎng)站建設(shè)費(fèi)用合理。

1.重寫一個SlidingMenu類繼承ViewGroup,病危該ViewGroup添加兩個子布局,分別為菜單和主界面顯示;

2.為了得到一個滑動的效果,選擇Scroller幫助我們實(shí)現(xiàn),配合ViewGroup下的computeScroll方法實(shí)現(xiàn)界面的更新;

3.利用一個boolean來記錄菜單是否打開,在菜單打開的狀態(tài)下向右滑動不會響應(yīng),在菜單關(guān)閉的情況向左滑動不會響應(yīng);

4.為了得到一個良好的交互,我們可以為界面滑動與手指移動的距離定義一個比例,如每次觸摸事件發(fā)生,界面移動的距離僅為手指移動距離的一半;

下面是兩張效果圖,界面沒怎么布局,大家湊合看

Android實(shí)現(xiàn)滑動側(cè)邊欄

SlidingMenu實(shí)現(xiàn)代碼:

package com.example.test; 
 
import android.content.Context; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Scroller; 
 
public class SlidingMenu extends ViewGroup { 
 
 private static final String TAG = SlidingMenu.class.getName(); 
 
 private enum Scroll_State { 
 Scroll_to_Open, Scroll_to_Close; 
 } 
 
 private Scroll_State state; 
 private int mMostRecentX; 
 private int downX; 
 private boolean isOpen = false; 
 
 private View menu; 
 private View mainView; 
 
 private Scroller mScroller; 
 
 private OnSlidingMenuListener onSlidingMenuListener; 
 
 public SlidingMenu(Context context, View main, View menu) { 
 super(context); 
 // TODO Auto-generated constructor stub 
 setMainView(main); 
 setMenu(menu); 
 init(context); 
 } 
 
 private void init(Context context) { 
 mScroller = new Scroller(context); 
 } 
 
 @Override 
 protected void onLayout(boolean arg0, int l, int t, int r, int b) { 
 // TODO Auto-generated method stub 
 mainView.layout(l, t, r, b); 
 menu.layout(-menu.getMeasuredWidth(), t, 0, b); 
 } 
 
 public void setMainView(View view) { 
 mainView = view; 
 addView(mainView); 
 } 
 
 public void setMenu(View view) { 
 menu = view; 
 addView(menu); 
 } 
 
 @Override 
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
 // TODO Auto-generated method stub 
 super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
 mainView.measure(widthMeasureSpec, heightMeasureSpec); 
 menu.measure(widthMeasureSpec - 150, heightMeasureSpec); 
 } 
 
 @Override 
 public boolean onTouchEvent(MotionEvent event) { 
 switch (event.getAction()) { 
 case MotionEvent.ACTION_DOWN: 
  mMostRecentX = (int) event.getX(); 
  downX = (int) event.getX(); 
  break; 
 case MotionEvent.ACTION_MOVE: 
  int moveX = (int) event.getX(); 
  int deltaX = mMostRecentX - moveX; 
  // 如果在菜單打開時向右滑動及菜單關(guān)閉時向左滑動不會觸發(fā)Scroll事件 
  if ((!isOpen && (downX - moveX) < 0) 
   || (isOpen && (downX - moveX) > 0)) { 
  scrollBy(deltaX / 2, 0); 
  } 
  mMostRecentX = moveX; 
  break; 
 case MotionEvent.ACTION_UP: 
  int upX = (int) event.getX(); 
  int dx = upX - downX; 
  if (!isOpen) {// 菜單關(guān)閉時 
  // 向右滑動超過menu一半寬度才會打開菜單 
  if (dx > menu.getMeasuredWidth() / 3) { 
   state = Scroll_State.Scroll_to_Open; 
  } else { 
   state = Scroll_State.Scroll_to_Close; 
  } 
  } else {// 菜單打開時 
  // 當(dāng)按下時的觸摸點(diǎn)在menu區(qū)域時,只有向左滑動超過menu的一半,才會關(guān)閉 
  // 當(dāng)按下時的觸摸點(diǎn)在main區(qū)域時,會立即關(guān)閉 
  if (downX < menu.getMeasuredWidth()) { 
   if (dx < -menu.getMeasuredWidth() / 3) { 
   state = Scroll_State.Scroll_to_Close; 
   } else { 
   state = Scroll_State.Scroll_to_Open; 
   } 
  } else { 
   state = Scroll_State.Scroll_to_Close; 
  } 
  } 
  smoothScrollto(); 
  break; 
 default: 
  break; 
 } 
 return true; 
 } 
 
 private void smoothScrollto() { 
 int scrollx = getScrollX(); 
 switch (state) { 
 case Scroll_to_Close: 
  mScroller.startScroll(scrollx, 0, -scrollx, 0, 500); 
  if (onSlidingMenuListener != null && isOpen) { 
  onSlidingMenuListener.close(); 
  } 
  isOpen = false; 
  break; 
 case Scroll_to_Open: 
  mScroller.startScroll(scrollx, 0, 
   -scrollx - menu.getMeasuredWidth(), 0, 500); 
  if (onSlidingMenuListener != null && !isOpen) { 
  onSlidingMenuListener.close(); 
  } 
  isOpen = true; 
  break; 
 default: 
  break; 
 } 
 } 
 
 @Override 
 public void computeScroll() { 
 if (mScroller.computeScrollOffset()) { 
  scrollTo(mScroller.getCurrX(), 0); 
 } 
 invalidate(); 
 } 
 
 public void open() { 
 state = Scroll_State.Scroll_to_Open; 
 smoothScrollto(); 
 } 
 
 public void close() { 
 state = Scroll_State.Scroll_to_Close; 
 smoothScrollto(); 
 } 
 
 public boolean isOpen() { 
 return isOpen; 
 } 
 
 public void setOnSlidingMenuListener( 
  OnSlidingMenuListener onSlidingMenuListener) { 
 this.onSlidingMenuListener = onSlidingMenuListener; 
 } 
 
 public interface OnSlidingMenuListener { 
 public void open(); 
 
 public void close(); 
 } 
 
} 

網(wǎng)站題目:Android實(shí)現(xiàn)滑動側(cè)邊欄-創(chuàng)新互聯(lián)
瀏覽路徑:http://www.rwnh.cn/article22/joijc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、Google、網(wǎng)站設(shè)計公司、網(wǎng)站導(dǎo)航、全網(wǎng)營銷推廣、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
中超| 徐闻县| 宁陕县| 新化县| 湖州市| 京山县| 汶上县| 安图县| 云梦县| 三台县| 绍兴县| 灌阳县| 上高县| 灵川县| 甘孜县| 太谷县| 望谟县| 阿拉善左旗| 尼勒克县| 利川市| 龙胜| 凌云县| 阳江市| 绵竹市| 玉田县| 从化市| 皋兰县| 安龙县| 通许县| 蒙城县| 姜堰市| 吉安县| 柳河县| 股票| 漳浦县| 康平县| 天祝| 襄垣县| 汾阳市| 应用必备| 五大连池市|