Android知识点四:侧栏滑动效果

    首先准备工作:mframework.jar包(SlidingMenu)

    MainActivity.java

   

private SlidingMenu menu;
	private MianAdapter mainAdapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		menu = new SlidingMenu(this);
		menu.setMenuItemBackground(R.drawable.sliding_menu_item_down, R.drawable.sliding_menu_item_release);
		menu.setMenuBackground(R.drawable.sliding_menu_background);
		// menu.setTtleHeight(Common.formatDipToPx(this, 44));
		menu.setBodyBackground(R.drawable.sliding_menu_body_background);
		mainAdapter = new MianAdapter(menu);
		menu.setAdapter(mainAdapter);
		setContentView(menu);

		menu.triggerItem(MianAdapter.GROUP_DEMO, MianAdapter.TOP_MENU);
	}
  Title类 公用titlebar

 

public abstract class SlidingMenuPage implements Callback {
	protected SlidingMenu menu;
	protected Handler handler;
	private View pageView;
	
	private LinearLayout mStandardLayout;
	private TextView mTitleTv;
	private ImageView mLeftImageView;
	private ImageView mRightImageView;

	public SlidingMenuPage(SlidingMenu _menu) {
		handler = new Handler(this);
		this.menu = _menu;
		pageView=LayoutInflater.from(menu.getContext()).inflate(R.layout.baseview, null);
		mStandardLayout = (LinearLayout) pageView.findViewById(R.id.standardview_abstract);
		mTitleTv = (TextView) pageView.findViewById(R.id.TitleText_Abstract);
		mLeftImageView = (ImageView) pageView.findViewById(R.id.LeftText_Abstract);
		mRightImageView= (ImageView) pageView.findViewById(R.id.RightText_Abstract);
		mLeftImageView.setImageResource(R.drawable.ico_menu_default);
		mLeftImageView.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				if (menu.isMenuShown()) {
					menu.hideMenu();
				}
				else {
					menu.showMenu();
				}
			}
		});
		View v = initPage();
		LinearLayout.LayoutParams params = null;
		if (Build.VERSION.SDK_INT > 7)
			params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
		else
			params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
		params.setMargins(0, 0, 0, 0);
		mStandardLayout.addView(v, params);
	}

	protected abstract View initPage();

	/** 获取页面的View实例 */
	public View getPage() {
		return pageView;
	}

	public boolean handleMessage(Message msg) {
		return false;
	}
	
	public void onActivityResult(int requestCode, int resultCode, Intent data)
	{
	}
	
	public final void setTitle(CharSequence leftText) {
		mTitleTv.setText(leftText);
	}
	
	public final void setRightImageView(int resId,OnClickListener l) {
		mRightImageView.setVisibility(View.VISIBLE);
		mRightImageView.setImageResource(resId);
		mRightImageView.setOnClickListener(l);
	}
	
	public final void setLeftImageView(int resId) {
		mLeftImageView.setVisibility(View.VISIBLE);
		mLeftImageView.setImageResource(resId);
	}

}
  侧边MianAdapter.java需继承MenuAdapter

 

public class MianAdapter extends MenuAdapter {

	public static final int GROUP_DEMO = 1;
	public static final int TOP_MENU = 2;// 信息1
	private static final int BILL_MENU = 3;// 信息2
	private static final int MONEY_MENU = 4;// 信息3

	private SlidingMenu menu;
	private SlidingMenuItem curItem;
	private SlidingMenuPage page = null;

	public MianAdapter(SlidingMenu menu) {
		super(menu);
		this.menu = menu;
		initData();
	}

	@Override
	public View getGroupView(int arg0, ViewGroup arg1) {
		View view = LayoutInflater.from(menu.getContext()).inflate(R.layout.slidingmenu_top_item, null);
		TextView tvItem = (TextView) view.findViewById(R.id.item_text);
		ImageView ivSet = (ImageView) view.findViewById(R.id.img_set);
		ImageView ivFace = (ImageView) view.findViewById(R.id.img_face);
		return view;
	}

	@Override
	public View getItemView(SlidingMenuItem arg0, ViewGroup arg1) {
		View view = LayoutInflater.from(menu.getContext()).inflate(R.layout.slidingmenu_item, null);
		TextView tvItem = (TextView) view.findViewById(R.id.item_text);
		tvItem.setText(String.valueOf(arg0.body));
		return view;
	}

	void initData() {
		setGroup(GROUP_DEMO, "");

		SlidingMenuItem item = new SlidingMenuItem();
		item.id = TOP_MENU;
		item.body = menu.getResources().getString(R.string.top_menu);
		setItem(GROUP_DEMO, item);

		item = new SlidingMenuItem();
		item.id = BILL_MENU;
		item.body = menu.getResources().getString(R.string.bill_menu);
		setItem(GROUP_DEMO, item);

		item = new SlidingMenuItem();
		item.id = MONEY_MENU;
		item.body = menu.getResources().getString(R.string.money_menu);
		setItem(GROUP_DEMO, item);
	}
	
	public SlidingMenuPage getCurrentSlidingMenuPage()
	{
		return page;
	}
	
	// 可添加页面链接
	@Override
	public boolean onItemTrigger(SlidingMenuItem item) {
		if (curItem != null && curItem.equals(item) && item.group == GROUP_DEMO) {
			return false;
		}

		curItem = item;
		switch (item.group) {
		case GROUP_DEMO: {
			switch (item.id) {
			case TOP_MENU: {
				page = new TopPage(menu);
			}
				break;
			case BILL_MENU: {
				page = new BillPage(menu);
			}
				break;
			case MONEY_MENU: {
				page = new MoneyPage(menu);
			}
				break;
			}
			if (page != null) {
				menu.setBodyView(page.getPage());
			}
		}
			break;
		}
		return super.onItemTrigger(item);
	}
}
  公用titlebar布局(baseview.xml)

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:id="@+id/standardview_abstract"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/titlelayout_abstract"
        android:layout_marginTop="-2dip"
        android:background="@drawable/sliding_menu_body_background"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/titlelayout_abstract"
        android:layout_width="fill_parent"
        android:layout_height="50dip"
        android:background="@drawable/base_titlebar"
        android:orientation="horizontal" >

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentLeft="true"
                android:layout_marginLeft="5dip"
                android:gravity="center_vertical"
                android:orientation="horizontal" >

                <ImageView
                    android:id="@+id/LeftText_Abstract"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:scaleType="center"
                    android:background="@drawable/baseview_topbtn_selector"
                    android:src="@drawable/ico_menu_default" />

                <Button
                    android:id="@+id/LeftText_Abstract_btn"
                    android:layout_width="55dip"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:textSize="16sp"
                    android:visibility="gone" />
            </LinearLayout>

            <TextView
                android:id="@+id/TitleText_Abstract"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:gravity="center"
                android:textColor="@color/white"
                android:textSize="20sp" />

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentRight="true"
                android:layout_marginRight="5dip"
                android:gravity="center_vertical"
                android:orientation="horizontal" >

                <ImageView
                    android:id="@+id/RightText_Abstract"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:scaleType="center"
                    android:src="@drawable/ico_back_default"
                     android:background="@drawable/baseview_topbtn_selector"
                    android:visibility="gone" />

                <Button
                    android:id="@+id/RightText_Abstract_btn"
                    android:layout_width="55dip"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:textSize="16sp"
                    android:visibility="gone" />
            </LinearLayout>
        </RelativeLayout>
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/CoverView_Abstract"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="gone" >
    </RelativeLayout>

</RelativeLayout>

  侧边Group布局(slidingmenu_top_item.xml)
  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_titlebar03"
    android:orientation="horizontal"
    android:paddingLeft="10dip"
    android:paddingRight="10dip" >

    <ImageView
        android:id="@+id/img_face"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:src="@drawable/bg_face" />

    <TextView
        android:id="@+id/text_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="8dip"
        android:layout_weight="1"
        android:text="会说话的猫"
        android:textColor="@color/slidingmenu_text_color"
        android:textSize="16sp" />
    
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ico_line" />

    <ImageView
        android:id="@+id/img_set"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dip"
        android:src="@drawable/ico_set_selector" />

</LinearLayout>

 侧边item布局(slidingmenu_item.xml)

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/sliding_menu_item_release"
    android:orientation="horizontal"
    android:padding="10dip" >

    <TextView
        android:id="@+id/item_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="信息1"
        android:textSize="16sp"
        android:layout_weight="1"
        android:textColor="@color/slidingmenu_text_color" />
    
    <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:src="@drawable/ico_arrows_selector"/>

</LinearLayout>


   jar包下载:mframework.jar

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt的QSidebar是一个侧栏控件,用于显示各种导航选项或工具。如果想要实现侧栏滑动效果,可以通过以下步骤进行操作。 首先,在创建QSidebar对象之后,可以对其进行一些基本的设置,如设置大小、位置等。可以使用setFixedWidth或setSizePolicy等方法来设置侧栏的宽度。 接下来,为了实现滑动效果,可以将QSidebar放置在一个QScrollArea中。QScrollArea是一个用于显示滚动内容的控件,通过将QSidebar作为其子部件来实现。可以使用setWidget方法将QSidebar设置为QScrollArea的子部件。 接着,可以使用QScrollArea的滚动条来控制侧栏滑动。通过QScrollArea的verticalScrollBar方法获取垂直滚动条,然后可以使用setValue方法来设置滚动条的当前值,从而实现侧栏滑动效果。可以根据需要,在相应的交互事件或信号槽中调用这些方法来控制滚动条的值。 最后,将QScrollArea放置在主窗口中的合适位置,调整布局以适应其他部件或界面的需要。 通过以上步骤,可以实现Qt中QSidebar的侧栏滑动效果。注意要在需要的情况下使用滚动条来控制侧栏滑动,以提供更好的用户体验。 ### 回答2: Qt 的 QSidebar 组件是一个侧栏控件,可以用于实现侧边导航、菜单、选项卡等功能。通过 QSidebar,我们可以实现侧栏滑动效果。 要实现 QSidebar 的滑动,可以使用 QPropertyAnimation 类来控制 QSidebar 的位置动画。首先,我们需要给 QSidebar 添加一个动画属性,通常可以使用 setGeometry 或者 setFixedSize 方法设置 QSidebar 的初始位置和大小。 然后,我们可以创建一个 QPropertyAnimation 对象,指定要进行动画的目标对象和属性。在这里,我们可以指定 QSidebar 对象的 geometry 属性为动画的目标属性。 接下来,设置 QPropertyAnimation 的持续时间和动画的起始值和结束值。可以使用 QPoint 类来表示 QSidebar 的位置。我们可以设置动画起始值为 QSidebar 的当前位置,结束值可以根据需要进行设置。 最后,我们调用 QPropertyAnimation 的 start 方法来启动动画。这样,当我们调用 start 方法时,QSidebar 将会按照动画的设定,平滑地从起始位置滑动到结束位置。 在动画结束后,可以通过连接 QPropertyAnimation 的 finished 信号来执行特定的操作,例如更新窗口内容或者继续处理其他逻辑。 总结起来,通过使用 QPropertyAnimation 类,我们可以轻松实现 QSidebar 的滑动效果。首先,设置 QSidebar 的初始位置和大小。然后,创建一个 QPropertyAnimation 对象,指定 QSidebar 为动画目标对象。设置动画的起始值和结束值。最后,启动动画并处理动画结束后的操作。这样,就可以实现侧栏滑动效果。 ### 回答3: Qt QSideBar 是 Qt 框架提供的一个边栏控件,常用于创建有滑动功能的侧边菜单。可以在界面的一侧以侧边栏的形式展示一些菜单项或者其他的交互界面。 要实现侧栏滑动的功能,需要一些代码和逻辑操作。首先,在 Qt 中创建一个 QSideBar 的实例,并设置其位置和大小。可以使用 QVBoxLayout 或 QHBoxLayout 将 QSideBar 放置在主窗口或者父窗口的一侧。然后,通过添加 QToolButton 或者其他的交互控件作为菜单项,给用户提供可点击的选项。 为了实现滑动效果,可以使用 QPropertyAnimation (属性动画)来操纵 QSideBar 控件的位置或大小属性。在用户点击菜单项时,先判断当前 QSideBar 的状态(是否展开或者收起),然后根据状态选择执行展开或收起动画,动画会移动侧边栏的位置或者改变宽度,以达到滑动效果。 代码示例如下: ```cpp // 创建 QSideBar 实例 QSideBar* sideBar = new QSideBar(); sideBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); // 设置侧边栏的位置和大小 QVBoxLayout* layout = new QVBoxLayout(parentWidget); layout->addWidget(sideBar); // 创建菜单项并添加到侧边栏 QToolButton* menuItem1 = new QToolButton(sideBar); menuItem1->setText("Menu Item 1"); sideBar->addItem(menuItem1); // 创建属性动画,设置起始值和结束值 QPropertyAnimation* animation = new QPropertyAnimation(sideBar, "geometry"); animation->setDuration(300); animation->setStartValue(QRect(0, 0, 0, parentWidget->height())); animation->setEndValue(QRect(0, 0, 200, parentWidget->height())); // 响应菜单项点击事件 connect(menuItem1, &QToolButton::clicked, [=]() { if (sideBar->isExpanded()) { animation->setStartValue(QRect(0, 0, 200, parentWidget->height())); animation->setEndValue(QRect(0, 0, 0, parentWidget->height())); } else { animation->setStartValue(QRect(0, 0, 0, parentWidget->height())); animation->setEndValue(QRect(0, 0, 200, parentWidget->height())); } // 执行动画 animation->start(); }); ``` 上述代码仅作为示例,具体实现还需要根据实际需求进行调整和完善。通过使用 QSideBar 和属性动画,可以很方便地实现侧栏滑动效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值