一个功能强大的画图板(四)

        博客停更了很久了,一直没有把画图板写完整,不过欠的账总是要还的,今天把最后的一篇补上。

我们这次主要是实现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 mViewList;//所有item集合

    public List getViewList() {
        return mViewList;
    }

    public void setViewList(List viewList) {
        mViewList = viewList;
    }

    private Context mContext;

    public DrawPagerAdapter(List 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
}

```

这个逻辑还是比较简单的,需要完整代码的可以去源码下载



你可能感兴趣的:(Android技术系列)