Android开发之图片处理框架(三)

这套框架终于到了完结篇了,这篇就算是整个框架的重点了,涉及的不仅是重做和撤销功能,更重要的是牵扯整个框架的架构。

这里写图片描述

之前我们实现的功能是添加图片和用画笔绘画,我们的做法是在一个自定义的PaintLayout上添加一个类似于自定义画布那样的去盛放画笔画出来的东西,再在PaintLayout上添加图片,这样做的不好之处在于各个类之间的功能不明确,现在把项目重新架构成把图片全部集成到另外一个自定义的ViewLayout上,把ViewLayout加载到PaintLayout上,再放上盛放画笔画出的View,也就是TopLayer,在PaintLayout上用两个链表去实现重做和撤销操作。

我们先看一下ViewLayout的实现。

这里的ViewLayout其实就是把第一节的PaintLayout稍微改改,但是在这里得通知外层修改链表,所有还得定义个接口,这里就直接贴代码了

public class ViewLayout extends FrameLayout{
   

    public interface ViewListener{
   
        void addView(PaintView paintView);
        void deleteView(PaintView paintView);
    }

    private Context context;
    private LayoutParams params;
    private ViewListener viewListener;
    private boolean canInit=false;

    public ViewLayout(Context context,ViewListener viewListener) {
        super(context);
        this.context=context;
        this.viewListener=viewListener;
        params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }

    private void addView(MotionEvent event){
        PaintView paintView=new PaintView(context, (int) event.getX(), (int) event.getY(), new PaintView.OnEnableListener() {

            @Override
            public void callback(PaintView stampView) {
                for (int i = 0; i < ViewLayout.this.getChildCount(); ++i) {
                    if (ViewLayout.this.getChildAt(i) != stampView) {
                        ((PaintView) ViewLayout.this.getChildAt(i)).setViewEnable(false);
                    }
                }
            }

            @Override
            public void onDelete(PaintView stampView) {
                stampView.setVisibility(GONE);
                viewListener.deleteView(stampView);
            }

        });
        this.addView(paintView,params);
        viewListener.addView(paintView);
    }

    @Override
    public 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值