2012-04-02 23 views
10

Üzerinde çalıştığım bir uygulamada bir pusula oluşturmalıyım. Bu yüzden temelde görüntüyü genişleten CompassView adlı yeni bir görünüm oluşturmaya çalıştım, doğu batı kuzey güneye bakan bir bitmapi gösteriyor, telefonun işaret ettiği dereceleri bulmak için sensörler kullanıyor ve görüntüyü oluşturacak şekilde döndürüyor gerçek bir pusula. Ama sorun şu ki, görüntüyü 45 derece gibi bazı açılara döndürmeye çalışırsam, küçülür. İşte daha iyi açıklamak için bazı görüntüler. İşte thisAndroid'de küçültmeden görüntüyü döndürme

geçerli: Gördüğünüz gibi ben döndürmek çalıştığınızda, ikinci görüntü büzüşmüş olan

This is normal

This is shrinked

etrafında 45. Ne ben yapmak istiyorum budur Şu anda kullandığınız kod:

 Bitmap bMap = BitmapFactory.decodeResource(getResources(), 
       R.drawable.compass); 
     Matrix xMatrix = new Matrix(); 
     xMatrix.reset(); 
     xMatrix.postRotate(360-mValue, 75, 75); //This is 75 because 150 is the image width 
     Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0, 
       bMap.getWidth(), bMap.getHeight(), xMatrix, true); 
     setImageBitmap(bMapRotate); 

Herhangi bir yardım için teşekkür ederiz ated. THanks

DÜZENLEME: (ÇÖZÜM) Sonunda, kabul cevabı sayesinde çalışma var. böylece

RotateAnimation rAnimAntiClockWise = new RotateAnimation(
        360 - mValue, 360 - event.values[0], 
        Animation.RELATIVE_TO_SELF, 0.5f, 
        Animation.RELATIVE_TO_SELF, 0.5f); 
//mValue is the angle in degrees and i subtracted it from 360 to make it anticlockwise, and event.values[0] is the same thing as mValue 
rAnimAntiClockWise.setFillAfter(true); 
rAnimAntiClockWise.setInterpolator(new LinearInterpolator()); 
rAnimAntiClockWise.setDuration(0); 
startAnimation(rAnimAntiClockWise); 

cevap

4

Döndürmeyle aynı şekilde çalışacak ve resmi yeniden boyutlandırmayan alternatif bir numara kullanabilirsiniz. Görüntüyü aslında 45 derecelik açı ile döndürüyorum ve animasyondan sonra da değişiklikler yapıyorum. Bana yollarını bildirdiğiniz için

rAnimAntiClockWise = new RotateAnimation(0.0f, 45.0f, 
       Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 
       0.5f); 
     rAnimAntiClockWise.setFillAfter(true); 
     rAnimAntiClockWise.setInterpolator(new LinearInterpolator());  
      bitmap = BitmapFactory.decodeResource(getResources(), 
        R.drawable.rotate);  
     rAnimAntiClockWise.setDuration(100); 
     img_rotate.startAnimation(rAnimAntiClockWise); 
+0

sayesinde tuval ve özel görünümler için yeni beri bunları nasıl uygulanacağı bilmiyordum rotateanimasyondan. Çalışmak için kodun bazı kısımlarını değiştirmek zorundaydım – KSubedi

3

sorunun yeni resim nedeniyle "dışarı çıkmış" kaynak köşelerine, aslında daha büyük olmasıdır, ve: İşte ben nasıl çalıştığını bilmek isteyen herkes için kullanıyorum kodudur görünümü sığacak şekilde ölçeklendiriyor.

Birkaç olası yaklaşımlar: Yukarıdaki kod sonra

  1. , doğru boyuttaki merkezi bölgesini kopyalama, Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height) diyoruz. Sahip olduğunuz kodu dikkate alın, ancak işe yaramaz bir ara bitmap oluşturur.

  2. Dönüştürme ve kaynak görüntüyü CreateBitmap'e vermek yerine, doğru boyutta değiştirilebilir bir Bitmap oluşturun, bir Tuval'e sarın ve Tuval'in döndürülen görüntüyü oluşturmasını söyleyin.

    bMapRotate = Bitmap.createBitmap(
        bMap.getWidth(), bMap.getHeight(), bMap.getConfig()); 
    Canvas canvasRotate = new Canvas(bMap); 
    canvasRotate.drawBitmap(bMap, xMatrix, paint); // any opaque Paint should do 
    
  3. sahip kodunu tutun, ama işlerken ölçek yerine kırpmak görünümü söyle.

+0

teşekkürler .. benim alternatifleri biliyordum ama ben sadece ben bir sürü ben bu acheived olabileceğini bilmiyordum – KSubedi

İlgili konular