2017-07-03 135 views
0

我有一個類(稱爲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

回答

0

如果你能保證塗鴉只會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

0

放置在佈局在你DrawActivity創建Doodling類的新實例。 然後使用下面的代碼: -

doodlingObject.setDrawingCacheEnabled(true); 
      doodlingObject.buildDrawingCache(); 
      Bitmap bitmap = doodlingObject.getDrawingCache(); 

希望這會有所幫助!

0

我會加硬方式來實現這一目標布提會建議你使用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); 
} 
相關問題