菜单栏点击移动的动画效果

效果就是仿新闻软件的分类菜单的动态移动效果,写了实现的方法,布局写的简单。

源码:

/**
 * 分类的动画移动
 * 
 * @author hongjie
 * 
 */
public class MoveActivity extends Activity implements OnClickListener {
	private TextView fir;
	private TextView sec;
	private TextView thi;

	private TextView text;
	private int leftLength;

	private int width;
	private int[] location = new int[2];

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.move_activity);
		// 获取添加到的Layout
		RelativeLayout linear = (RelativeLayout) findViewById(R.id.move);
		// 覆盖的图片view
		text = new TextView(this);
		text.setBackgroundResource(R.drawable.slidebar);
		text.setText("第一个");
		// 在Layout中加入view
		linear.addView(text);

		// 获取屏幕的宽度
		WindowManager wm = (WindowManager) this
				.getSystemService(Context.WINDOW_SERVICE);
		width = wm.getDefaultDisplay().getWidth();

		// 加载组件
		fir = (TextView) findViewById(R.id.first);
		sec = (TextView) findViewById(R.id.second);
		thi = (TextView) findViewById(R.id.third);
		// 添加监听器
		fir.setOnClickListener(this);
		sec.setOnClickListener(this);
		thi.setOnClickListener(this);
	}

	/**
	 * 点击事件
	 */
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		// 获取view的位置
		v.getLocationOnScreen(location);
		// 移动点击组件的x位置
		MoveView(text, leftLength, location[0], 0, 0);
		// 将当前位置的文本添加到view中
		text.setText(((TextView) v).getText());
		// 将当前的位置 作为下次移动的起点位置
		leftLength = location[0];
	}

	/**
	 * 移动动画方法
	 * 
	 * @param view
	 * @param startX
	 * @param stopX
	 * @param startY
	 * @param stopY
	 */
	public void MoveView(View view, int startX, int stopX, int startY, int stopY) {
		TranslateAnimation trans = new TranslateAnimation(startX, stopX,
				startY, stopY);
		trans.setDuration(100);
		trans.setFillAfter(true);
		view.startAnimation(trans);
	}
}

布局:

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/first"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="第一个" />

        <TextView
            android:id="@+id/second"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="第二个" />

        <TextView
            android:id="@+id/third"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="第三个" />
    </LinearLayout>

</RelativeLayout>

效果:


需要注意的地方:

1.不要直接的设置整个布局为LinearLayout,那样设置了权重后,添加的view就不能放到点击的组件上面了,添加的组件会自动的在行布局中添加一个组件位置,不能覆盖到点击的组件。使用相对布局,也可以保证布局的扩展性。

2.// 获取添加到的Layout
        RelativeLayout linear = (RelativeLayout) findViewById(R.id.move);

// 在Layout中加入view
        linear.addView(text);

往指定的布局中添加view。

3.MoveView(View view, int startx, int stopx, int starty, int stopy)中的参数是相对获取的布局的参数,不是手机屏幕的参数。

### 回答1: Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的控件和功能,使得开发者可以轻松创建专业的图形界面应用程序。 在Qt中,可以通过使用QWidget或QMainWindow作为应用程序的主窗口,同时使用QMenu或QMenuBar作为菜单栏。如果希望左侧菜单栏展开时右侧界面能够随之移动,可以使用QVBoxLayout或QHBoxLayout来实现界面布局。 首先,创建一个QWidget或QMainWindow的实例作为主窗口。然后,创建一个QMenu或QMenuBar的实例作为菜单栏,并将其添加到主窗口中。接下来,创建一个QWidget的实例作为右侧界面,并将其添加到主窗口中。 对于左侧菜单栏,可以使用QVBoxLayout来实现垂直布局。将QMenu或QMenuBar实例以及其他需要展示的菜单项添加到QVBoxLayout中。为了实现菜单展开时右侧界面随之移动,可以使用QStackedWidget作为右侧界面的容器,并将其他界面作为QStackedWidget的子widget添加到其中。 当左侧菜单栏中的某个菜单项被点击时,可以通过设置QStackedWidget的当前显示的widget来实现界面的切换,从而实现右侧界面随之移动效果。 总结起来,通过使用QVBoxLayout、QMenu或QMenuBar、QStackedWidget以及其他必要的widget和布局控件,可以实现Qt左侧菜单栏展开时右侧界面随之移动效果。具体的实现可以根据具体的需求和设计来进行调整和优化。 ### 回答2: Qt左侧菜单栏展开右侧界面随之移动是指,在Qt界面中,左侧有一个菜单栏,当用户点击菜单项时,右侧的界面会随之改变并移动位置。 实现这个功能可以采用Qt的布局机制和信号槽机制。首先,在设计界面时,将左侧菜单栏和右侧界面放入一个整体的布局中,可以使用Qt提供的QVBoxLayout或QHBoxLayout。然后,将左侧菜单栏中每个菜单项都连接到一个对应的槽函数。 在槽函数中,可以通过修改右侧界面所在的QWidget对象的位置和大小来实现移动。可以通过设置QWidget的geometry函数来改变位置和大小,或者使用Qt的动画机制来实现平滑过渡效果。 具体实现时,可以将右侧界面设计为多个QWidget对象的堆叠布局,每个菜单项对应一个QWidget对象,通过切换当前显示的QWidget对象来改变右侧界面的内容。当某个菜单项被点击时,触发相应的槽函数,槽函数中通过设置当前QWidget对象的位置和大小,使其显示在正确的位置。 需要注意的是,当设置右侧界面的位置和大小时,要考虑到左侧菜单栏的宽度,避免遮挡或者出现重叠的情况。可以通过设置边距或者调整布局的大小来实现合适的效果。 总结起来,实现Qt左侧菜单栏展开右侧界面随之移动的功能,需要使用Qt的布局和信号槽机制,将界面进行合理的布局,通过连接菜单项的槽函数来修改右侧界面的位置和大小,实现菜单展开和右侧界面移动效果。 ### 回答3: Qt 左侧菜单栏展开右侧界面随之移动的实现可以通过使用 Qt 的布局管理器和信号槽机制来完成。 首先,可以使用 QVBoxLayout 将左侧菜单栏按钮放置在一个垂直布局中。接下来,创建一个右侧部件的 QWidget,它将作为主要显示区域。 当左侧菜单栏按钮点击时,可以通过绑定信号和槽的方式实现界面的切换和移动。可以使用 QStackedLayout 来管理右侧部件的隐藏和显示,以便在切换界面时具有平滑的过渡效果。 具体来说,可以创建一个槽函数,当左侧菜单栏按钮点击时,该函数会将相应的右侧部件切换为可见状态,并将其它部件隐藏起来。然后,可以使用布局管理器的方法在界面之间进行平滑的过渡移动,例如 setGeometry() 函数。 在实现过程中,需要为左侧菜单栏按钮设置信号和槽,以便在点击按钮时触发切换界面的事件。可以使用按钮的 clicked() 信号来连接槽函数。 总结起来,实现 Qt 左侧菜单栏展开右侧界面随之移动效果,需要使用 Qt 的布局管理器和信号槽机制,通过切换界面和调整界面的布局来实现移动效果。这样,当点击左侧菜单栏按钮时,右侧界面将会平滑地移动和展开。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值