如何从视图中检索可绘制(图片)?

时间:2010-03-03 18:58:55

标签: android

我编写代码来绘制视图。完成后,如何从视图中获取生成的图像。例如,在下面的代码中,我想从mCustomDrawableView获取drawable(Image)。我怎样才能做到这一点?感谢。

public class HelloTestGraph extends Activity {
    /** Called when the activity is first created. */

    // @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
        LinearLayout lo = (LinearLayout) findViewById(R.id.top_view);
        LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);

        CustomDrawableView mCustomDrawableView = new CustomDrawableView(this);
        mCustomDrawableView.setLayoutParams(param);
        lo.addView(mCustomDrawableView);
    }

    public class CustomDrawableView extends View {
        private ShapeDrawable mDrawable;
        private Drawable mPic;

        public CustomDrawableView(Context context) {
            super(context);

            int x = 10;
            int y = 10;
            int width = 300;
            int height = 50;

            mDrawable = new ShapeDrawable(new OvalShape());
            mDrawable.getPaint().setColor(0xff74AC23);
            mDrawable.setBounds(x, y, x + width, y + height);

            mPic = getResources().getDrawable(R.drawable.example_picture);
            mPic.setBounds(x, y + 100, x + width, y + height+100);
        }

        protected void onDraw(Canvas canvas) {
            mDrawable.draw(canvas);
            mPic.draw(canvas);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

这有点令人费解,但应该让你到那儿。

步骤1:创建所需大小的可静音位图并将其存放在一边。它可能是设备屏幕的大小或最大视图的大小(取决于您以后要用它做什么)将该位图指针保存在像myBitmap这样的东西

步骤2:使用上述位图创建画布。 “Canvas myCanvas = new Canvas(myBitmap);”

步骤3:在onDraw()方法中,将您的视图绘制到传入的“canvas”对象和您自己的自定义对象。

protected void onDraw(Canvas canvas) {
    mDrawable.draw(canvas);
    mPic.draw(canvas);
    mDrawable.draw(myCanvas);
    mPic.draw(myCanvas);
}

步骤4:您的原始位图现在应该只包含您的视图的完全渲染版本。

我不确定这是否正是您正在寻找的,但它会为您提供视图内容的位图(可以转换为图像)。

答案 1 :(得分:0)

如果你想从课堂外访问它们,你可以在自定义类中指定getter和setter。

public Drawable getDrawable() { return mDrawable; }

然后从类外部(如在您的活动中),您可以在视图实例化后调用视图上的getDrawable()方法。

Drawable drawable = mCustomDrawableView.getDrawable();