[置顶] 高仿今日头条(2)

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

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

[置顶] 高仿今日头条(2)_第1张图片[置顶] 高仿今日头条(2)_第2张图片

自定义拖动控件,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




你可能感兴趣的:([置顶] 高仿今日头条(2))