Android:如何将对象从非活动(视图)类传递给活动?
我有一个类(称为Doodling :))),它扩展了视图和一个活动(称为DrawActivity),显示该视图。我需要将由涂鸦类创建的位图对象传递给绘制活动。有可能这样做吗?如果是的话,怎么样?Android:如何将对象从非活动(视图)类传递给活动?
的代码如下:
public class Doodling extends View {
Bitmap bitmap;
public DoodleCanvas(Context context, AttributeSet attrs) {
...
}
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if (bitmap != null) {
bitmap .recycle();
}
canvas= new Canvas();
bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
}
protected void onDraw(Canvas c) {
...
}
。
public class DrawActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_draw);
}
的涂鸦图,然后通过的.xml
如果你能保证涂鸦只会DrawActivity使用,那么你就可以得到使用getSystemService()
活动参考。
public class DrawActivity extends AppCompatActivity {
private static final String TAG = "DrawActivity";
public static DrawActivity get(Context context) {
// noinspection ResourceType
return (DrawActivity)context.getSystemService(TAG);
}
@Override
public Object getSystemService(String name) {
if(TAG.equals(name)) return this ;
return super.getSystemService(name);
}
而且
public class Doodle extends View {
....
DrawActivity drawActivity = DrawActivity.get(getContext());
你能否详细说明你的答案?什么是TAG?并使用此代码意味着我将有机会获得doodlig的抽象方法? – user3770803
哎呦我错过了添加TAG字段 – EpicPandaForce
这实际上解决了我的问题!非常感谢!!! – user3770803
放置在布局在你DrawActivity
创建Doodling
类的新实例。 然后使用下面的代码: -
doodlingObject.setDrawingCacheEnabled(true);
doodlingObject.buildDrawingCache();
Bitmap bitmap = doodlingObject.getDrawingCache();
希望这会有所帮助!
我会加硬方式来实现这一目标布提会建议你使用EventBus为更清洁的使用,而不是担心接口或活动的生命周期
如果您已经从创建的视图对象,你可以做到这一点使用的接口活动本身
喜欢的东西:
interface BitMapListener{
void onBitMapCreated(Bitmap bMap);
}
那么这个接口来实现这一点的活动
public DrawActivity ... implements BitMapListener{
BitMap created;
@override
public void onBitMapCreated(BitMap map){
created = map;
}
//when calling DrawView activity pass in this object
//DrawView(DrawActivity.this);
就在从活动调用drawView函数类记住经过的这样的活动对象:
DrawView ...{
DrawActivity callback;
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if (bitmap != null) {
bitmap .recycle();
}
canvas= new Canvas();
bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
callback.onBitMapCreated(bitmap);
}
你能在你的视图中使用getDrawingCache方法? – adi9090
我想我can.but多数民众赞成没有问题,我有位图对象,我只是不知道如何通过它 – user3770803
你到底想要做什么:'我需要将我的涂鸦类创建的位图对象传递给绘制活动' – leobelizquierdo