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

+0

你能在你的视图中使用getDrawingCache方法? – adi9090

+0

我想我can.but多数民众赞成没有问题,我有位图对象,我只是不知道如何通过它 – user3770803

+0

你到底想要做什么:'我需要将我的涂鸦类创建的位图对象传递给绘制活动' – leobelizquierdo

如果你能保证涂鸦只会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()); 
+0

你能否详细说明你的答案?什么是TAG?并使用此代码意味着我将有机会获得doodlig的抽象方法? – user3770803

+0

哎呦我错过了添加TAG字段 – EpicPandaForce

+0

这实际上解决了我的问题!非常感谢!!! – 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); 
}