高仿今日头条(2)

简介: 接上一篇博客:http://blog.csdn.net/xiangzhihong8/article/details/51262939 这部分主要是实现频道管理页面,先上两张图片, 自定义拖动控件,onInterceptTouchEvent事件拦截,dispatchTouchEvent事件分发,onTouchEvent(对于View而言) 想要具体了解android的事件拦截机制,

接上一篇博客:http://blog.csdn.net/xiangzhihong8/article/details/51262939

这部分主要是实现频道管理页面,先上两张图片,


自定义拖动控件,onInterceptTouchEvent事件拦截,dispatchTouchEvent事件分发,onTouchEvent(对于View而言)

想要具体了解android的事件拦截机制,请访问下面的地址:http://blog.csdn.net/xiangzhihong8/article/details/51317291

接下来说说我们如何实现头条的拖动效果吧,

首先,对于我们来说需要获取控件的位置,控件在屏幕的位置

                        downX = (int) ev.getX();
			downY = (int) ev.getY();
			windowX = (int) ev.getX();
			windowY = (int) ev.getY();

然后长按的时候,拖动控件,实际是通过计算,引入相应的布局,具体看代码

{
		setOnItemLongClickListener(new OnItemLongClickListener() {

			@Override
			public boolean onItemLongClick(AdapterView<?> parent, View view,
										   int position, long id) {
				int x = (int) ev.getX();// 长安事件的X位置
				int y = (int) ev.getY();// 长安事件的y位置

				startPosition = position;// 第一次点击的postion
				dragPosition = position;
				if (startPosition < 1) {
					return false;
				}
				ViewGroup dragViewGroup = (ViewGroup) getChildAt(dragPosition - getFirstVisiblePosition());
				TextView dragTextView = (TextView)dragViewGroup.findViewById(R.id.item_channel_name);
				dragTextView.setSelected(true);
				dragTextView.setEnabled(false);
				itemHeight = dragViewGroup.getHeight();
				itemWidth = dragViewGroup.getWidth();
				itemTotalCount = DragGridView.this.getCount();
				int row = itemTotalCount / nColumns;// 算出行数
				Remainder = (itemTotalCount % nColumns);// 算出最后一行多余的数量
				if (Remainder != 0) {
					nRows = row + 1;
				} else {
					nRows = row;
				}
				// 如果特殊的这个不等于拖动的那个,并且不等于-1
				if (dragPosition != AdapterView.INVALID_POSITION) {
					// 释放的资源使用的绘图缓存。如果你调用buildDrawingCache()手动没有调用setDrawingCacheEnabled(真正的),你应该清理缓存使用这种方法。
					win_view_x = windowX - dragViewGroup.getLeft();//VIEW相对自己的X,半斤
					win_view_y = windowY - dragViewGroup.getTop();//VIEW相对自己的y,半斤
					dragOffsetX = (int) (ev.getRawX() - x);//手指在屏幕的上X位置-手指在控件中的位置就是距离最左边的距离
					dragOffsetY = (int) (ev.getRawY() - y);//手指在屏幕的上y位置-手指在控件中的位置就是距离最上边的距离
					dragItemView = dragViewGroup;
					dragViewGroup.destroyDrawingCache();
					dragViewGroup.setDrawingCacheEnabled(true);
					Bitmap dragBitmap = Bitmap.createBitmap(dragViewGroup.getDrawingCache());
					mVibrator.vibrate(50);//设置震动时间
					startDrag(dragBitmap, (int)ev.getRawX(),  (int)ev.getRawY());
					hideDropItem();
					dragViewGroup.setVisibility(View.INVISIBLE);
					isMoving = false;
					requestDisallowInterceptTouchEvent(true);
					return true;
				}
				return false;
			}
		});
	}

我这里就不贴代码了,然后我们通过中间数据库操作整个app的逻辑流程流转,具体代码请到下面地址下载:

https://github.com/xiangzhihong/topNews




目录
打赏
0
0
0
0
498
分享
相关文章
|
10月前
基于AutoJs的今日头条极速版读新闻
基于AutoJs的今日头条极速版读新闻
99 0
2天3夜开发了一个微信小程序,用它挣了10.7万(二)
2天3夜开发了一个微信小程序,用它挣了10.7万(二)
323 0
2天3夜开发了一个微信小程序,用它挣了10.7万(二)
仿抖音短视频系统源码,点击实现波纹效果
仿抖音短视频系统源码,点击实现波纹效果
1874 0
仿今日头条项目架构
仿今日头条项目架构 (一)—— ios11导航栏和tabBar层级仿今日头条项目架构 (二)—— 项目主架构的搭建仿今日头条项目架构 (三)—— 导航栏的自定义实现仿今日头条项目架构 (四)—— 首页父子控制器频道切换的集成 ...
1616 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等