Android仿IOS TabView Item悬停效果布局
2015-06-29 12:08:41  By: dwtedx

本Demo实现了仿IOS的TabView的顶部悬停布局、但是实现的原理不是用的Android的ListView、也不是用的Android中ExpandableListView、是用的LinearLayout嵌入的方式实现的、且支持多个、效果还是不错的

android item 悬浮


XML代码

<LinearLayout
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	android:orientation="vertical" >
	
	<TextView
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:background="#ffffff"
		android:gravity="center_horizontal"
		android:padding="10dp"
		android:tag="sticky"
		android:text="顶悬停布局" />

	<TextView
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:background="#696969"
		android:gravity="center_horizontal"
		android:padding="40dp"
		android:text="@string/hello_world"
		android:textColor="#ffffff" />

	<TextView
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:background="#696969"
		android:gravity="center_horizontal"
		android:padding="40dp"
		android:text="@string/hello_world"
		android:textColor="#ffffff" />
</LinearLayout>


Java onTouchEvent代码

@SuppressLint("Recycle")
@Override
public boolean onTouchEvent(MotionEvent ev) {
	if (redirectTouchToStickyView) {
		ev.offsetLocation(0,
			((getScrollY() 
			  mStickyViewTopOffset) 
			- mCurrentStickyView.getTop()));
	}

	if (ev.getAction() == MotionEvent.ACTION_DOWN) {
		hasNotDoneActionDown = false;
	}

	if (hasNotDoneActionDown) {
		MotionEvent down = MotionEvent.obtain(ev);
		down.setAction(MotionEvent.ACTION_DOWN);
		super.onTouchEvent(down);
		hasNotDoneActionDown = false;
	}

	if (ev.getAction() == MotionEvent.ACTION_UP
			|| ev.getAction() == MotionEvent.ACTION_CANCEL) {
		hasNotDoneActionDown = true;
	}
	return super.onTouchEvent(ev);
}


Java代码将sticky画出来

@Override
protected void dispatchDraw(Canvas canvas) {
	super.dispatchDraw(canvas);
	if (mCurrentStickyView != null) {
		// 先保存起来
		canvas.save();
		// 将坐标原点移动到(0, getScrollY() 
			  mStickyViewTopOffset)
		canvas.translate(0, getScrollY() 
			  mStickyViewTopOffset);

		if (mShadowDrawable != null) {
			int left = 0;
			int top = mCurrentStickyView
				.getHeight()   mStickyViewTopOffset;
			int right = mCurrentStickyView.getWidth();
			int bottom = top   (int) (density 
				* defaultShadowHeight   0.5f);
			mShadowDrawable.setBounds(left, top, right, bottom);
			mShadowDrawable.draw(canvas);
		}
		canvas.clipRect(0, mStickyViewTopOffset,
				mCurrentStickyView.getWidth(),
				mCurrentStickyView.getHeight());
		mCurrentStickyView.draw(canvas);
		// 重置坐标原点参数
		canvas.restore();
	}
}


最后给贴上Demo的源代码、希望对大家有用、有兴趣的哥们可以下载看看

源代码下载链接: http://dwtedx.com/download.html?bdkey=s/1qW7hEwO 密码: 7ndd

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+