我希望实现一项功能,允许我采用预定义的边框/图像,并将它们放在用户拍摄的图片上方。
此应用程序与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);
}
}
答案 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);
}
}
}