在画布上绘图,添加贴纸,自定义位图 - Android

时间:2014-09-17 00:11:55

标签: android canvas bitmap drawable

我希望实现一项功能,允许我采用预定义的边框/图像,并将它们放在用户拍摄的图片上方。

此应用程序与Aviary或照片编辑应用程序的功能非常相似。

我似乎无法弄清楚如何在画布或视图上绘制许多图像(比如胡须,鼻子等)。

是否有特定方法来完成此堆叠位图/过滤器编辑?我尝试创建自定义视图,但我只能设置1个setContentView();

我的代码现在相对简单,但我只是想知道是否有单独堆叠视图或位图的方法。

public class CustomView extends View {

public CustomView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
}

public CustomView(Context context, AttributeSet attrs) {
    super(context);
}



@Override
public void onDraw (Canvas canvas) {
    //Draw stuff in here
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.basketball);
    canvas.drawBitmap(bitmap, 0, 0, null);


}

}

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_main);

    CustomView m_View = new CustomView(this);
    setContentView(m_View);

}

}

1 个答案:

答案 0 :(得分:0)

这种逻辑可以通过多种方式实现。它基于您的要求和应用程序的详细信息。基本上你可以做类似的事情:

@SuppressLint("WrongCall")
@Override
protected void onDraw(Canvas canvas) {
    // use for-int to avoid object (iterator) allocations
    int count = mItems.size();
    for (int i = 0; i < count; i++) {
        mItems.get(i).onDraw(canvas);
    }
}
ArrayList<Item> mItems;

static class Item {

    Context mContext;
    Drawable mDrawable;
    Rect mRect;
    int mResourceId;

    // resource ID to point to drawable resources
    public Item(Context context, int resourceId) {
        mContext = context;
        mResourceId = resourceId;
        mRect = new Rect();
    }

    public void onDraw(Canvas canvas) {
        // allocate image only when it actually required
        if (mDrawable == null) {
            mDrawable = mContext.getResources().getDrawable(mResourceId);
        }
        // manage mRect to place sticker and etc.
        if (mDrawable != null) {
            mDrawable.setBounds(mRect);
            mDrawable.draw(canvas);
        }
    }
}