日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android防谷歌滑动效果,谷歌是如何做到这一点的?在Android应用程序中滑动ActionBar...

發(fā)布時(shí)間:2023/12/20 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android防谷歌滑动效果,谷歌是如何做到这一点的?在Android应用程序中滑动ActionBar... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

事實(shí)上,有一種方法可以做到這一點(diǎn)。即使沒有實(shí)施自己的ActionBar。

看看hierachyviewer吧!(位于工具目錄中)

還有的DecorView,并且LinearLayout作為一個(gè)孩子。這LinearLayout包含ActionBar其他內(nèi)容和其他內(nèi)容。所以,你可以簡(jiǎn)單地應(yīng)用一些FrameLayout.LayoutParams,LinearLayout并以這種方式在左側(cè)獲得一些空間。然后,您可以使用菜單ListView填充此空間,并使用FrameLayout覆蓋其他內(nèi)容,當(dāng)單擊它時(shí),折疊菜單。所以,這里有一些代碼:

首先,折疊/擴(kuò)展類(SlideMenu.java):package?your.cool.app;import?android.app.Activity;import?android.content.Context;import?android.content.Intent;import?android.graphics.Rect;import?android.util.Log;import?android.view.LayoutInflater;import?android.view.View;import?android.view.View.OnClickListener;import?android.view.ViewGroup;import?android.view.Window;import?android.view.animation.TranslateAnimation;import?android.widget.AdapterView;import?android.widget.AdapterView.OnItemClickListener;import?android.widget.ArrayAdapter;import?android.widget.FrameLayout;import?android.widget.ImageView;import?android.widget.LinearLayout;import?android.widget.ListView;import?android.widget.TextView;public?class?SlideMenu?{//just?a?simple?adapterpublic?static?class?SlideMenuAdapter?extends?ArrayAdapter?{

Activity?act;

SlideMenu.SlideMenuAdapter.MenuDesc[]?items;

class?MenuItem?{

public?TextView?label;

public?ImageView?icon;

}

static?class?MenuDesc?{

public?int?icon;

public?String?label;

}

public?SlideMenuAdapter(Activity?act,?SlideMenu.SlideMenuAdapter.MenuDesc[]?items)?{

super(act,?R.id.menu_label,?items);

this.act?=?act;

this.items?=?items;

}

@Override

public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{

View?rowView?=?convertView;

if?(rowView?==?null)?{

LayoutInflater?inflater?=?act.getLayoutInflater();

rowView?=?inflater.inflate(R.layout.menu_listitem,?null);

MenuItem?viewHolder?=?new?MenuItem();

viewHolder.label?=?(TextView)?rowView.findViewById(R.id.menu_label);

viewHolder.icon?=?(ImageView)?rowView.findViewById(R.id.menu_icon);

rowView.setTag(viewHolder);

}

MenuItem?holder?=?(MenuItem)?rowView.getTag();

String?s?=?items[position].label;

holder.label.setText(s);

holder.icon.setImageResource(items[position].icon);

return?rowView;

}}private?static?boolean?menuShown?=?false;private?static?View?menu;private?static?LinearLayout?content;private?static?FrameLayout?parent;private?static?int?menuSize;private?static?int?statusHeight?=?0;private?Activity?act;SlideMenu(Activity?act)?{

this.act?=?act;}//call?this?in?your?onCreate()?for?screen?rotationpublic?void?checkEnabled()?{

if(menuShown)

this.show(false);}public?void?show()?{//get?the?height?of?the?status?bar

if(statusHeight?==?0)?{

Rect?rectgle?=?new?Rect();

Window?window?=?act.getWindow();

window.getDecorView().getWindowVisibleDisplayFrame(rectgle);

statusHeight?=?rectgle.top;

}

this.show(true);}public?void?show(boolean?animate)?{

menuSize?=?Functions.dpToPx(250,?act);

content?=?((LinearLayout)?act.findViewById(android.R.id.content).getParent());

FrameLayout.LayoutParams?parm?=?(FrameLayout.LayoutParams)?content.getLayoutParams();

parm.setMargins(menuSize,?0,?-menuSize,?0);

content.setLayoutParams(parm);//animation?for?smooth?slide-out

TranslateAnimation?ta?=?new?TranslateAnimation(-menuSize,?0,?0,?0);

ta.setDuration(500);

if(animate)

content.startAnimation(ta);

parent?=?(FrameLayout)?content.getParent();

LayoutInflater?inflater?=?(LayoutInflater)?act.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

menu?=?inflater.inflate(R.layout.menu,?null);

FrameLayout.LayoutParams?lays?=?new?FrameLayout.LayoutParams(-1,?-1,?3);

lays.setMargins(0,statusHeight,?0,?0);

menu.setLayoutParams(lays);

parent.addView(menu);

ListView?list?=?(ListView)?act.findViewById(R.id.menu_listview);

list.setOnItemClickListener(new?OnItemClickListener()?{

@Override

public?void?onItemClick(AdapterView>?parent,?View?view,?int?position,?long?id)?{

//handle?your?menu-click

}

});

if(animate)

menu.startAnimation(ta);

menu.findViewById(R.id.overlay).setOnClickListener(new?OnClickListener()?{

@Override

public?void?onClick(View?v)?{

SlideMenu.this.hide();

}

});

Functions.enableDisableViewGroup((LinearLayout)?parent.findViewById(android.R.id.content).getParent(),?false);

((ExtendedViewPager)?act.findViewById(R.id.viewpager)).setPagingEnabled(false);

((ExtendedPagerTabStrip)?act.findViewById(R.id.viewpager_tabs)).setNavEnabled(false);

menuShown?=?true;

this.fill();}public?void?fill()?{

ListView?list?=?(ListView)?act.findViewById(R.id.menu_listview);

SlideMenuAdapter.MenuDesc[]?items?=?new?SlideMenuAdapter.MenuDesc[5];

//fill?the?menu-items?here

SlideMenuAdapter?adap?=?new?SlideMenuAdapter(act,?items);

list.setAdapter(adap);}public?void?hide()?{

TranslateAnimation?ta?=?new?TranslateAnimation(0,?-menuSize,?0,?0);

ta.setDuration(500);

menu.startAnimation(ta);

parent.removeView(menu);

TranslateAnimation?tra?=?new?TranslateAnimation(menuSize,?0,?0,?0);

tra.setDuration(500);

content.startAnimation(tra);

FrameLayout.LayoutParams?parm?=?(FrameLayout.LayoutParams)?content.getLayoutParams();

parm.setMargins(0,?0,?0,?0);

content.setLayoutParams(parm);

Functions.enableDisableViewGroup((LinearLayout)?parent.findViewById(android.R.id.content).getParent(),?true);

((ExtendedViewPager)?act.findViewById(R.id.viewpager)).setPagingEnabled(true);

((ExtendedPagerTabStrip)?act.findViewById(R.id.viewpager_tabs)).setNavEnabled(true);

menuShown?=?false;}}

一些幫助方法(對(duì)我來說,在靜態(tài)Functions.java中):public?static?int?dpToPx(int?dp,?Context?ctx)?{

Resources?r?=?ctx.getResources();

return?(int)?TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,?dp,?r.getDisplayMetrics());}//originally:?http://stackoverflow.com/questions/5418510/disable-the-touch-events-for-all-the-views//modified?for?the?needs?herepublic?static?void?enableDisableViewGroup(ViewGroup?viewGroup,?boolean?enabled)?{

int?childCount?=?viewGroup.getChildCount();

for?(int?i?=?0;?i?

View?view?=?viewGroup.getChildAt(i);

if(view.isFocusable())

view.setEnabled(enabled);

if?(view?instanceof?ViewGroup)?{

enableDisableViewGroup((ViewGroup)?view,?enabled);

}?else?if?(view?instanceof?ListView)?{

if(view.isFocusable())

view.setEnabled(enabled);

ListView?listView?=?(ListView)?view;

int?listChildCount?=?listView.getChildCount();

for?(int?j?=?0;?j?

if(view.isFocusable())

listView.getChildAt(j).setEnabled(false);

}

}

}

}

然后,布局:

菜單布局(res / layout / menu.xml)

android:layout_width="fill_parent"

android:layout_height="fill_parent"?>

android:orientation="vertical"

android:layout_height="fill_parent"

android:layout_width="250dip"

android:background="@color/darkblack">

android:id="@+id/menu_listview"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:divider="@color/dividerblack"

android:dividerHeight="2dip"??/>

android:id="@+id/overlay"

android:layout_width="match_parent"

android:layout_height="match_parent"?>

listitems的布局(res / layout / menu_listitem.xml):

android:id="@+id/menu_icon"

android:layout_width="30dp"

android:layout_height="30dp"

android:layout_marginRight="5dip"

android:layout_marginLeft="10dip"

android:layout_marginTop="10dip"

android:layout_marginBottom="10dip"?/>

android:id="@+id/menu_label"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:textColor="@color/white"

android:textSize="24dp"

android:layout_marginTop="10dip"

android:layout_marginBottom="10dip"?/>

如何使用它:

在你的onCreate():private?SlideMenu?slidemenu;@Overridepublic?void?onCreate(Bundle?savedInstanceState)?{

//your?onCreate?code

slidemenu?=?new?SlideMenu(this);

slidemenu.checkEnabled();}

在ActionBar homebutton的處理程序中:slidemenu.show();

而已!

現(xiàn)在,它的一些屏幕截圖:

據(jù)我所知,它正在發(fā)揮作用。如果您遇到任何問題或我的解釋不明確,請(qǐng)與我聯(lián)系!

編輯:ExtendedViewPager&ExtendedPagerStrip:

ExtendedViewPager:package?your.cool.app;//source:?http://blog.svpino.com/2011/08/disabling-pagingswiping-on-android.htmlimport?android.content.Context;import?android.support.v4.view.ViewPager;import?android.util.AttributeSet;import?android.view.MotionEvent;public?class?ExtendedViewPager?extends?ViewPager?{private?boolean?enabled;public?ExtendedViewPager(Context?context,?AttributeSet?attrs)?{

super(context,?attrs);

this.enabled?=?true;}@Overridepublic?boolean?onTouchEvent(MotionEvent?event)?{

if?(this.enabled)?{

return?super.onTouchEvent(event);

}

return?false;}@Overridepublic?boolean?onInterceptTouchEvent(MotionEvent?event)?{

if?(this.enabled)?{

return?super.onInterceptTouchEvent(event);

}

return?false;}public?void?setPagingEnabled(boolean?enabled)?{

this.enabled?=?enabled;}}

ExtendedPagerTabStrip:package?your.cool.app;//source:?http://blog.svpino.com/2011/08/disabling-pagingswiping-on-android.htmlimport?android.content.Context;import?android.support.v4.view.PagerTabStrip;import?android.util.AttributeSet;import?android.view.MotionEvent;public?class?ExtendedPagerTabStrip?extends?PagerTabStrip?{private?boolean?enabled;public?ExtendedPagerTabStrip(Context?context,?AttributeSet?attrs)?{

super(context,?attrs);

this.enabled?=?true;}@Overridepublic?boolean?onTouchEvent(MotionEvent?event)?{

if?(this.enabled)?{

return?super.onTouchEvent(event);

}

return?false;}@Overridepublic?boolean?onInterceptTouchEvent(MotionEvent?event)?{

if?(this.enabled)?{

return?super.onInterceptTouchEvent(event);

}

return?false;}public?void?setNavEnabled(boolean?enabled)?{

this.enabled?=?enabled;}}

我將它SlideMenu用于一個(gè)ViewPager帶有PagerTabStripfor,如Talk,Market等標(biāo)簽的Activity?。你不能以一種簡(jiǎn)單的方式禁用這些視圖,所以上面的兩個(gè)類只是擴(kuò)展它們以onTouch在禁用時(shí)停止事件。

總結(jié)

以上是生活随笔為你收集整理的android防谷歌滑动效果,谷歌是如何做到这一点的?在Android应用程序中滑动ActionBar...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。