2016-07-09 8 views
0

私が描くことができるSurfaceViewのキャンバスがあります。今、ボタンを押して、私はキャンバスを取るし、ビットマップを作る、底に表示されます。だから、ビットマップを作るために書かなければならないコードは何ですか?AndroidStudioでキャンバスをビットマップに変換する

public class Square extends Activity implements Runnable { 

private SurfaceView surface; 
private SurfaceHolder holder; 
private boolean locker = true; 
private Thread thread; 

int tmp1 = 0, tmp2 = 0; 

Background sfondo; 

Canvas canvas; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    surface = (SurfaceView) findViewById(R.id.mysurface); 
    surface.setFocusable(true); 
    holder = surface.getHolder(); 

    sfondo = new Background((BitmapFactory.decodeResource(getResources(), R.drawable.sfondo))); 


    thread = new Thread(this); 
    thread.start(); 
} 

@Override 
public void run() { 
    while (locker) { 
     if (!holder.getSurface().isValid()) { 
      continue; 
     } 
     canvas = new Canvas(); 
     canvas = holder.lockCanvas(); 
     draw(canvas); 
     holder.unlockCanvasAndPost(canvas); 
    } 
} 

private void draw(Canvas canvas) { 
    sfondo.draw(canvas); 

    tmp1 = (int)Math.random(); 
    tmp2 = (int)Math.random(); 

    canvas.drawCircle(tmp1, tmp2, 5, Color.BLACK); 
} 
} 
} 

答えて

0
private Bitmap generateBitmap(){ 
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    surface.draw(canvas); 
    return bitmap; 
} 

次に、あなたはビットマップを使用することができます。

別の解決策は、Lollo単に

Bitmap bitmap = surface.getDrawingCache() 
+0

で使用し、私は、このコードを追加することができますどこ? ?私は2つのメソッド "public void run(){..}"と "public void draw(Canvas canvas)"を持っています...あなたはこれを説明できますか? – LolloAAA

+0

あなたのコードを投稿してくださいその後、 – Pongpat

+0

@Override ます。public void実行(){ しばらく(ロッカー){ 場合{ 続ける(holder.getSurface()はisValid()!。); } AA = Bitmap.createBitmap(surface.getWidth()、surface.getHeight()、Bitmap.Config.ARGB_8888); キャンバス=新しいキャンバス(AA); canvas = holder.lockCanvas(); 描画(キャンバス); holder.unlockCanvasAndPost(canvas); } } プライベート空描画(キャンバスキャンバス){tmp1、tmp2 =(int)Math.random(...); canvas.drawCircle(tmp1、tmp2、gra、black); } – LolloAAA

0

ようになり、ここで{} とが読み取り可能なコードがOK

@Override public void run() { 
    while(locker){ 
    if(!holder.getSurface().isValid()){ 
    continue; 
    } 
    AA = Bitmap.createBitmap(surface.getWidth(), surface.getHeight(), Bitmap.Config.ARGB_8888); 
    canvas = new Canvas(AA); 
    canvas = holder.lockCanvas(); 
    draw(canvas); 
    holder.unlockCanvasAndPost(canvas); 
    } 
    } 
    private void draw(Canvas canvas) { 
    tmp1, tmp2 = (int)Math.random(...); 
    canvas.drawCircle(tmp1, tmp2, gra, black); 
    } 
関連する問題