2011-03-03 15 views

cevap

7

deneyin bu

Sen bitmap olarak resim yüklemek gerekir
Bitmap mBitmap = Bitmap.createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter); 

protected void onDraw(Canvas canvas) { 
      canvas.drawColor(0xFFAAAAAA); 
      canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 

     } 
+0

Ama canvas.drawBitmap (mBitmap, 0, 0, mBitmapPaint) kullanıyorsanız;: o tuval etmek için büyük bir drawble uyum değişecek çalışır ve kaydedilen görüntüyü tuval üzerine yükler, ancak aynı zamanda geri almayı ve çalışmayı durdurmayı tekrar çalışır, Kodumu kontrol et http://pastebin.com/cP9w6stm – AndroidDev

35

:

Resources res = getResources(); 
Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.your_image); 

Sonra bitmap kesilebilir yapmak ve üzerine bir tuval oluşturun: o zaman

Canvas canvas = new Canvas(bitmap.copy(Bitmap.Config.ARGB_8888, true)); 

You tuval üzerine çizebilir.

+0

Ya benim .png büyükse ve yüklendikten sonra kesilirse ? yani onu kırpmak istemiyorum. Ekrandan daha büyük olabilir, sonra onu yakınlaştırılabilir ve hareketli hale getirmeye çalışacağım. Bunu nasıl yapabilirim? Çok çok teşekkür ederim! –

+1

@ perfectionm1ng BitmapRegionDecoder uygulamasına bakın. Büyük görüntüler için kısmi yüklemeye izin verir. Yani, şu anda oluşturduğunuz görüntünün yalnızca bir kısmını yükleyebilmelisiniz. –

+0

Aynı sorunu yaşıyorum Kanvasını kullanıyorum cs = new Canvas (bitmap); Kaynaklar res = getResources(); Bitmap bitmapx = BitmapFactory.decodeResource (res, R.drawable.overlay_good_full); Bitmap bitmapxx = BitmapFactory.decodeResource (res, R.drawable.overlay_bad_full); if (text.equals ("İyi")) cs.drawBitmap (bitmapx, 0, 0, tPaint); { cs.drawBitmap (bitmapxx, 0, 0, tPaint); } –

1
package com.android.jigsawtest; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

public class SurafaceClass extends SurfaceView implements 
     SurfaceHolder.Callback { 
    Bitmap mBitmap; 
Paint paint =new Paint(); 
    public SurafaceClass(Context context) { 
     super(context); 
     mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, 
      int height) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawColor(Color.BLACK); 
     canvas.drawBitmap(mBitmap, 0, 0, paint); 

    } 

} 
+2

onDraw yeni bir Paint nesnesi oluşturmak, performans için kötü –

+0

tamam thnks .. güncellendi ümidim yanıt – user1140237

118

bir tuval üzerinde bir çizilebilir çizmek için iyi bir yol kendiniz deşifre ama bunu yapmak için sisteme bırakmak değildir:

Drawable d = getResources().getDrawable(R.drawable.foobar); 
d.setBounds(left, top, right, bottom); 
d.draw(canvas); 

Bu drawables her türlü sadece Bitmaplerle çalışacaktır. Ve aynı zamanda, sadece boyut değiştiğinde, aynı tekrar tekrar kullanabileceğiniz anlamına gelir. Ayrıca bu yolu kullanabilirsiniz

+0

Bir resim, tuval yaklaşımı ile animasyon için bir animasyon listesi (çoklu kare) nasıl kullanılır? – RichieHH

+0

Çok faydalı! En azından bir roket bilimi olmadan sadece bir arka plan resmine ihtiyaç duyduğunuzda! – Asim

+0

@RichieHH Bir SurfaceView'de (muhtemelen atıklar) arka planım var ve bu yüzey görünümü bir Framelayout'a gömüldü ve bu framelayout daha sonra canlandırdığım ImageViews içeriyor - belki bu sizin için bir seçenek olabilir mi? – AgentKnopf

8

.

Resources res = getResources(); 
Bitmap bitmap = BitmapFactory.decodeResource(res, yourDrawable); 
yourCanvas.drawBitmap(bitmap, 0, 0, yourPaint); 
+0

BitmapFactory sınıfının "BitmapFactory.decodeResource (Resource, Drawable)" yöntemi yok; "... – Crisic

+0

@Crisic" Sürülebilirsiniz "in bir tamsayı olduğunu varsayabilirim. –

7
Drawable d = ContextCompat.getDrawable(context, R.drawable.***) 
d.setBounds(left, top, right, bottom); 
d.draw(canvas); 
+0

Ben gerResource(). DrawDrawable (id) ile Drawable oluşturun – Vikram

+0

getDrawable (id) kullanımdan kaldırılıyor, yukarıdaki ContextCompat çağrısını veya getDrawable (id, tema) çağrısını kullanmalısınız. https://developer.android.com/reference/android/content/res/Resources.html#getDrawable(int) – wblaschko

+0

Benim için 'setBounds' kullanmak gerekiyordu. Onsuz hiçbir şey gösterilmedi. –

İlgili konular