如何设置SlidingMenu左右滑动的宽度不一样图片瀑布流

您好,欢迎光临本站!&&&
还没有帐号? 赶紧
Android仿易信界面SlidingMenu左右滑动
UID:665688
在线时间6小时
黑豆0威望0贡献值0交易币0红豆0
简介易信是一个操作比较简介的界面。类似的SlidingMenu还有百度影音、快播等等。下面就是一个模仿易信的一个界面,先看一下效果图首页左边滑动效果右边滑动效果主要代码:package edu.njupt.zhb.import edu.njupt.zhb.slidemenu.R;import com.jeremyfeinstein.slidingmenu.lib.SlidingMimport com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentAimport android.os.Bimport android.support.v4.app.Fimport android.support.v4.app.FragmentTimport android.view.Vimport android.view.View.OnClickLimport android.widget.ImageBpublic class MainActivity extends SlidingFragmentActivity implements OnClickListener{ protected SlidingMenu leftRightSlidingM private ImageButton ivTitleBtnL private ImageButton ivTitleBtnR private Fragment mC @Override public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initLeftRightSlidingMenu();setContentView(R.layout.activity_main);ini 阅读全文地址:
UID:665688
在线时间6小时
黑豆0威望0贡献值0交易币0红豆0
很强大,正想研究下,简直就是踏破铁鞋无觅处得来全不费工夫,嘿嘿
UID:665688
在线时间6小时
黑豆0威望0贡献值0交易币0红豆0
我能问个问题么,我现在有这些个需求,两个菜单不一样,左边的有屏幕一半宽就行了,右边要满屏,这种怎么实现
UID:455131
在线时间0小时
发帖141324
黑豆-2734威望-2584贡献值0交易币0红豆0
挺好的~~收了。。借鉴下。谢谢了
UID:455131
在线时间0小时
发帖141324
黑豆-2734威望-2584贡献值0交易币0红豆0
我下下来怎么MyListView那个类里面怎么有好多错呀?changeHeaderViewByState()找不到
UID:455131
在线时间0小时
发帖141324
黑豆-2734威望-2584贡献值0交易币0红豆0
你个逗比,坑我。红红火火
访问内容超出本站范围,不能确定是否安全
限100 字节
您目前还是游客,请
&回复后跳转到最后一页
版权所有 Time now is:05-31 14:35
Gzip enabledAndroid UI实现SlidingMenu侧滑菜单效果
作者:IT_xiao小巫
字体:[ ] 类型:转载 时间:
这篇文章主要为大家详细介绍了Android UI实现SlidingMenu侧滑菜单效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本篇博客给大家分享一个效果比较好的侧滑菜单的Demo,实现点击左边菜单切换Fragment。
效果如下:
主Activity代码:
package com.infzm.slidingmenu.
import android.os.B
import android.support.v4.app.F
import android.view.V
import android.view.View.OnClickL
import android.view.W
import android.widget.ImageV
import android.widget.TextV
import com.infzm.slidingmenu.demo.fragment.LeftF
import com.infzm.slidingmenu.demo.fragment.TodayF
import com.jeremyfeinstein.slidingmenu.lib.SlidingM
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentA
* @author wuwenjie
* @description 主界面
public class MainActivity extends SlidingFragmentActivity implements
OnClickListener {
private ImageView topB
private Fragment mC
private TextView topTextV
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE); // 无标题
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initSlidingMenu(savedInstanceState);
topButton = (ImageView) findViewById(R.id.topButton);
topButton.setOnClickListener(this);
topTextView = (TextView) findViewById(R.id.topTv);
* 初始化侧边栏
private void initSlidingMenu(Bundle savedInstanceState) {
// 如果保存的状态不为空则得到之前保存的Fragment,否则实例化MyFragment
if (savedInstanceState != null) {
mContent = getSupportFragmentManager().getFragment(
savedInstanceState, "mContent");
if (mContent == null) {
mContent = new TodayFragment();
// 设置左侧滑动菜单
setBehindContentView(R.layout.menu_frame_left);
getSupportFragmentManager().beginTransaction()
.replace(R.id.menu_frame, new LeftFragment()).commit();
// 实例化滑动菜单对象
SlidingMenu sm = getSlidingMenu();
// 设置可以左右滑动的菜单
sm.setMode(SlidingMenu.LEFT);
// 设置滑动阴影的宽度
sm.setShadowWidthRes(R.dimen.shadow_width);
// 设置滑动菜单阴影的图像资源
sm.setShadowDrawable(null);
// 设置滑动菜单视图的宽度
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// 设置渐入渐出效果的值
sm.setFadeDegree(0.35f);
// 设置触摸屏幕的模式,这里设置为全屏
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 设置下方视图的在滚动时的缩放比例
sm.setBehindScrollScale(0.0f);
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager().putFragment(outState, "mContent", mContent);
* 切换Fragment
* @param fragment
public void switchConent(Fragment fragment, String title) {
mContent =
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, fragment).commit();
getSlidingMenu().showContent();
topTextView.setText(title);
public void onClick(View v) {
switch (v.getId()) {
case R.id.topButton:
侧边栏菜单Fragment
package com.infzm.slidingmenu.demo.
import android.app.A
import android.os.B
import android.support.v4.app.F
import android.view.LayoutI
import android.view.V
import android.view.View.OnClickL
import android.view.ViewG
import com.infzm.slidingmenu.demo.MainA
import com.infzm.slidingmenu.demo.R;
* @author wuwenjie
* @description 侧边栏菜单
public class LeftFragment extends Fragment implements OnClickListener{
private View todayV
private View lastListV
private View discussV
private View favoritesV
private View commentsV
private View settingsV
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public void onAttach(Activity activity) {
super.onAttach(activity);
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_menu, null);
findViews(view);
public void findViews(View view) {
todayView = view.findViewById(R.id.tvToday);
lastListView = view.findViewById(R.id.tvLastlist);
discussView = view.findViewById(R.id.tvDiscussMeeting);
favoritesView = view.findViewById(R.id.tvMyFavorites);
commentsView = view.findViewById(R.id.tvMyComments);
settingsView = view.findViewById(R.id.tvMySettings);
todayView.setOnClickListener(this);
lastListView.setOnClickListener(this);
discussView.setOnClickListener(this);
favoritesView.setOnClickListener(this);
commentsView.setOnClickListener(this);
settingsView.setOnClickListener(this);
public void onDestroyView() {
super.onDestroyView();
public void onDestroy() {
super.onDestroy();
public void onClick(View v) {
Fragment newContent =
String title =
switch (v.getId()) {
case R.id.tvToday: // 今日
newContent = new TodayFragment();
title = getString(R.string.today);
case R.id.tvLastlist:// 往期列表
newContent = new LastListFragment();
title = getString(R.string.lastList);
case R.id.tvDiscussMeeting: // 讨论集会
newContent = new DiscussFragment();
title = getString(R.string.discussMeetting);
case R.id.tvMyFavorites: // 我的收藏
newContent = new MyFavoritesFragment();
title = getString(R.string.myFavorities);
case R.id.tvMyComments: // 我的评论
newContent = new MyCommentsFragment();
title = getString(R.string.myComments);
case R.id.tvMySettings: // 设置
newContent = new MySettingsFragment();
title = getString(R.string.settings);
if (newContent != null) {
switchFragment(newContent, title);
* 切换fragment
* @param fragment
private void switchFragment(Fragment fragment, String title) {
if (getActivity() == null) {
if (getActivity() instanceof MainActivity) {
MainActivity fca = (MainActivity) getActivity();
fca.switchConent(fragment, title);
上面是核心代码,引入SlidingMenu开源库。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Slidingmenu侧滑菜单
侧滑菜单实现方式:根据需要实现
1、直接导入jar包,此方法只能new对象,而不能通过继承SlidingFragmentActivity,否则可能会报错。
2、下载类库,将Sliding menu类库引入直接项目,可直接使用
3、直接将需要的类文件、布局文件、图片、Strings文件等直接拷入自己的项目进行使用。
主要步骤:
主Activity继承SlidingFragmentActivity
setBehindContentView(R.layout.leftmenu_fl_frame);//侧滑菜单布局,使用帧布局可以用Fragment替换
setContentView(R.layout.activity_index);//主Activity的内容页
//1、获得侧滑菜单对象
getSlidingMenu();
//2、设置是左滑还是右滑,还是左右都可以滑
sm.setMode(SlidingMenu.LEFT_RIGHT);
//3、设置侧滑菜单出来之后,内容页显示的剩余宽度
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
//4、设置侧滑菜单的阴影,开始时特别暗,慢慢变淡。
sm.setShadowDrawable(R.drawable.shadow);
//5、设置左菜单阴影图片
sm.setShadowWidthRes(R.dimen.shadow_width);
//6、设置侧滑菜单的滑动范围(设置手势模式)
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
设置淡入淡出的比例
sm.setFadeDegree(0.35f);
设置滑动时菜单的是否淡入淡出
sm.setFadeEnabled(true);
设置滑动时拖拽效果
sm.setBehindScrollScale(0.333f);
//设置右侧滑菜单布局
sm.setSecondaryMenu(R.layout.rightmenu_fl_frame);
//替换左侧滑布局
LeftMenuFragment leftMenuFragment=new LeftMenuFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.leftmenu_fl,
leftMenuFragment).commit();
//替换右侧滑布局
RightMenuFragment rightMenuFragment=new RightMenuFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.rightmenu_fl,
rightMenuFragment).commit();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。从右侧滑出的遮盖型SlidingMenu - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 17时,
从右侧滑出菜单栏,会遮盖原有的内容页面
代码片段(1)
SlidingMenu.java&~&11KB&&&&
package com.example.slidingdemo1;
import android.app.A
import android.content.C
import android.util.AttributeS
import android.util.L
import android.view.D
import android.view.MotionE
import android.view.VelocityT
import android.view.V
import android.view.ViewC
import android.view.ViewTreeO
import android.view.ViewTreeObserver.OnGlobalLayoutL
import android.view.WindowM
import android.widget.RelativeL
import android.widget.S
* 側滑工具類 ,右側滑動視圖
* 使用方法:先設置中間的內容佈局,在設置右邊的側滑佈局,方法分別為setCenterView(),setRightView()
* @author Administrator
public class SlidingMenu extends RelativeLayout {
private final String Tag = “slidingMenu”;
private View mSlidingV
private View mDetailV
private RelativeLayout bgS
private int screenW
private int screenH
private Scroller mS
private VelocityTracker mVelocityT
private int mTouchS
private float mLastMotionX;
private float mLastMotionY;
private static final int VELOCITY = 50;
private boolean mIsBeingDragged =
private boolean tCanSlideRight =
private boolean hasClickRight =
public SlidingMenu(Context context) {
super(context);
init(context);
private void init(Context context) {
bgShade = new RelativeLayout(context);
mScroller = new Scroller(getContext());
// 获得能够进行手势滑动的距离
mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
WindowManager windowManager = ((Activity) context).getWindow()
.getWindowManager();
Display display = windowManager.getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
LayoutParams bgParams = new LayoutParams(screenWidth, screenHeight);
bgParams.addRule(RelativeLayout.CENTER_IN_PARENT);
bgShade.setLayoutParams(bgParams);
public SlidingMenu(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
public SlidingMenu(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
public void addViews(View center, View right) {
setRightView(right);
setCenterView(center);
public void setRightView(View view) {
LayoutParams behindParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.FILL_PARENT);
behindParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
addView(view, behindParams);
mDetailView =
mDetailView.bringToFront();// 确保rightview置顶
ViewTreeObserver vto = mDetailView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {// 调用layout或调用visibility时调用此方法
public void onGlobalLayout() {// 设置后rightview是叠加在centerview上面,所以需要先将rightview移动到右侧不可见区域
mDetailView.getViewTreeObserver().removeGlobalOnLayoutListener(
Log.i(Tag, "width:" + mDetailView.getWidth());
mDetailView.scrollTo(-mDetailView.getWidth(),
mDetailView.getScrollY());
public void setCenterView(View view) {
LayoutParams aboveParams = new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
LayoutParams bgParams = new LayoutParams(screenWidth, screenHeight);
bgParams.addRule(RelativeLayout.CENTER_IN_PARENT);
addView(bgShade, bgParams);
addView(view, aboveParams);
mSlidingView =
// mSlidingView.bringToFront();
public void scrollTo(int x, int y) {
super.scrollTo(x, y);
postInvalidate();
public void computeScroll() {
if (!mScroller.isFinished()) {
if (puteScrollOffset()) {
int oldX = mDetailView.getScrollX();
int oldY = mDetailView.getScrollY();
int x = mScroller.getCurrX();
int y = mScroller.getCurrY();
if (oldX != x || oldY != y) {
if (mDetailView != null) {
mDetailView.scrollTo(x, y);
if (x & 0)
bgShade.scrollTo(x + 20, y);// 背景阴影右偏
bgShade.scrollTo(x - 20, y);// 背景阴影左偏
invalidate();
private boolean canSlideRight =
// 设置是否可手动滑动
public void setCanSliding(boolean right) {
canSlideRight =
/ 拦截touch事件 /
public boolean onInterceptTouchEvent(MotionEvent ev) {
final int action = ev.getAction();
final float x = ev.getX();
final float y = ev.getY();
switch (action) {
case MotionEvent.ACTION_DOWN:
mLastMotionX =
mLastMotionY =
mIsBeingDragged =
if (canSlideRight) {
mDetailView.setVisibility(View.VISIBLE);
case MotionEvent.ACTION_MOVE:
final float dx = x - mLastMotionX;
final float xDiff = Math.abs(dx);
final float yDiff = Math.abs(y - mLastMotionY);
if (xDiff & mTouchSlop && xDiff & yDiff) {
if (canSlideRight) {
float oldScrollX = mDetailView.getScrollX();
if (oldScrollX & 0) {
mIsBeingDragged =
mLastMotionX =
if (dx & 0) {
mIsBeingDragged =
mLastMotionX =
return mIsBeingD
/ 处理拦截后的touch事件 /
public boolean onTouchEvent(MotionEvent ev) {
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
mVelocityTracker.addMovement(ev);
final int action = ev.getAction();
final float x = ev.getX();
final float y = ev.getY();
switch (action) {
case MotionEvent.ACTION_DOWN:
if (!mScroller.isFinished()) {
mScroller.abortAnimation();
mLastMotionX =
mLastMotionY =
// if (mDetailView.getScrollX() == getDetailViewWidth()
// && mLastMotionX & getMenuViewWidth()) {
case MotionEvent.ACTION_MOVE:
if (mIsBeingDragged) {
final float deltaX = mLastMotionX -
mLastMotionX =
float oldScrollX = mDetailView.getScrollX();
float scrollX = oldScrollX + deltaX;
if (canSlideRight) {// 此控件为右侧的menu,活动区域应该是在初始位置右侧,也就是scroll值只能是小于等于0
if (scrollX & 0)
scrollX = 0;
if (deltaX & 0 && oldScrollX & 0) { // scrollX的范围值
final float rightBound = -getDetailViewWidth();
final float leftBound = 0;
if (scrollX & leftBound) {
scrollX = leftB
} else if (scrollX & rightBound) {
scrollX = rightB
if (mDetailView != null) {// 随手势滚动view
mDetailView.scrollTo((int) scrollX,
mDetailView.getScrollY());
if (scrollX & 0)
bgShade.scrollTo((int) scrollX + 20,
mSlidingView.getScrollY());
bgShade.scrollTo((int) scrollX - 20,
mSlidingView.getScrollY());
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (mIsBeingDragged) {
final VelocityTracker velocityTracker = mVelocityT
puteCurrentVelocity(100);
float xVelocity = velocityTracker.getXVelocity();// 滑动的速度
int oldScrollX = mDetailView.getScrollX();
int dx = 0;
if (oldScrollX &= 0 && canSlideRight) {
if (xVelocity & VELOCITY) {// 向右滑动,超出指定速度时
dx = -getDetailViewWidth() - oldScrollX;
} else if (xVelocity & -VELOCITY) {// 向左滑动,超出指定速度时
dx = -oldScrollX;
// if (hasClickRight) {
// hasClickRight =
// setCanSliding( tCanSlideRight);
} else if (oldScrollX & -getDetailViewWidth() / 2) {// 指定速度内
dx = -getDetailViewWidth() - oldScrollX;
} else if (oldScrollX &= -getDetailViewWidth() / 2) {// 指定速度内
dx = -oldScrollX;
// if (hasClickRight) {
// hasClickRight =
// setCanSliding( tCanSlideRight);
smoothScrollTo(dx);
//获得右侧视图的宽度
private int getDetailViewWidth() {
if (mDetailView == null) {
return mDetailView.getWidth();
// 自动滚动view
void smoothScrollTo(int dx) {
int duration = 500;
int oldScrollX = mDetailView.getScrollX();
mScroller.startScroll(oldScrollX, mDetailView.getScrollY(), dx,
mDetailView.getScrollY(), duration);
invalidate();
/ 显示右侧边的view /
public void showRightView() {
int menuWidth = mDetailView.getWidth();
int oldScrollX = mDetailView.getScrollX();
System.out.println("x : " + oldScrollX);
if (oldScrollX == 0) {
mDetailView.setVisibility(View.VISIBLE);
smoothScrollTo(-menuWidth);
tCanSlideRight = canSlideR
hasClickRight =
setCanSliding(true);
} else if (oldScrollX == -menuWidth) {
smoothScrollTo(menuWidth);
if (hasClickRight) {
hasClickRight =
setCanSliding(tCanSlideRight);
开源中国-程序员在线工具:
相关的代码(1524)
为啥不直接使用android support library里面的Drawer,挺好用的
2楼:孙建飞1987 发表于
这东西部能用啊
开源从代码分享开始
以明知的其它代码

我要回帖

更多关于 宽度不一样图片瀑布流 的文章

 

随机推荐