博客停更了很久了,一直没有把画图板写完整,不过欠的账总是要还的,今天把最后的一篇补上。
我们这次主要是实现DrawBoard与ViewPager联合使用,解决他们的滑动冲突。首先我们需要添加一个ViewPager
```
<com.example.administrator.drawboard.view.DrawVp android:id="@+id/drawBoard_vp" android:layout_width="match_parent" android:layout_height="match_parent"> </com.example.administrator.drawboard.view.DrawVp>
```
就是将原来的DrawBoard替换了下
然后就是ViewPager的适配器
```
public class DrawPagerAdapter extends PagerAdapter { private List<View> mViewList;//所有item集合 public List<View> getViewList() { return mViewList; } public void setViewList(List<View> viewList) { mViewList = viewList; } private Context mContext; public DrawPagerAdapter(List<View> viewList, Context context) { mViewList=viewList; mContext = context; } @Override public int getCount() { return mViewList==null?0:mViewList.size(); } @Override public Object instantiateItem(ViewGroup container, int position) { View view= LayoutInflater.from(mContext).inflate(R.layout.layout_vp_item,null); FrameLayout drawBoardFl= (FrameLayout) view.findViewById(R.id.drawBoard_fl); drawBoardFl.addView(mViewList.get(position)); if (view.getParent() == null) { container.addView(view); } return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } }
```
很简单的一个Adapter,我是利用View来保存所有的视图数据的,其实我们也可以用Bitmap保存,这个大家可以尝试实现下。
之后我们要处理下如何添加图片的逻辑,代码如下
```
/** * 将图片添加到集合 */ private void addBitmap(Intent data){ Bundle extras = data.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); if (mViewList != null) { DrawBoard drawBoard=new DrawBoard(this); drawBoard.flushCavans(photo); mViewList.add(drawBoard); } } } /** * 更新适配器数据 */ private void updateAdapter(){ if (mViewList != null) { mDrawPagerAdapter.setViewList(mViewList); mDrawPagerAdapter.notifyDataSetChanged(); } }
```
因为滑动冲突的问题,我们还需要处理下事件分发,直接覆写下 onInterceptTouchEvent()就可以
```
public class DrawVp extends ViewPager { private boolean isIntercept=true; public DrawVp(Context context, AttributeSet attrs) { super(context, attrs); } public boolean isIntercept() { return isIntercept; } public void setIntercept(boolean intercept) { isIntercept = intercept; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return isIntercept; } }
```
最后再主界面判断下点击操作就可以了
```
if (v.getId() != R.id.take_photo && v.getId() != R.id.photos) { //处理ViewPager和View的滑动冲突 if (v.getId() ==R.id.browse_btn) { drawBoardVp.setIntercept(true); }else { drawBoardVp.setIntercept(false); } drawBoardView= (DrawBoard) mDrawPagerAdapter.getViewList().get(drawBoardVp.getCurrentItem());//获取当前item的DrawBoard }
```
这个逻辑还是比较简单的,需要完整代码的可以去源码下载