O yakınlaştırma/kaydırma efektleri ile araç basit beyaz tahta tür olması gerekiyordu tutarlar.Android Tuval, farklı zoom ile birden yolları
Yakınlaştırma/kaydırmaya gelince, her şey yol bölümünün tüm çizimi ile tamamdır.
Beyaz tahtaya yakınlaştırma uygulandığında, yaptığım yoldan bağımsız olarak, yakınlaştırma uygulandıktan sonra gelen tüm çizgiler, aslında okşadığım konumla ilgili olarak yer değiştirir.
Gereksiz kodu göstermeden ayrıntıları olabildiğince iyi göstermeye çalışacağım, yine de uzun bir mesaj, lütfen, lütfen benimle ol. Bir görüntü bin kelimeye bedeldir gibi, Ben durumu açıklayacaktır
: Yani
, birçok denedim herhangi bir başarı olmadan farklı yaklaşımlar. Bu Görünüm uzanan uygulanacağı
:
Şimdi teknik kısmına aşağı, bu şu an ne yapıyorum olduğunu.
sadece vuruş canlandırma gerçekleştirmek için onDraw yöntemi kullanmak uygulanan: I doğru çekme sonrasında elde edilen bir bit eşlem yerleştirmek için kullanıldığı iki ImageViews ve gerçekleştirilir yakınlaştırma
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
if(isDrawing)
{
canvas.drawPath(mPath, mPaint);
canvas.drawBitmap(mBitmap, 0, 0, mPaint);
}
}
. İki görünüm kullanmamın nedeni, çizim oluşturma anında her zaman tek bir görünüm sağlamak için bunları değiştirmektir. şey tuvale çizilen sonra
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:visibility="visible"
android:scaleType="matrix" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:visibility="visible"
android:scaleType="matrix" />
, benim görünümüne verilen bit eşlem göndermek, o zaman daha çizimlere yeni marka ayarlamak için tuval temizlemek:
private void sendImage2BackView()
{
//veeery extensive and boring code surpressed here
//set the entire hocus-pocus' resulting bitmap as a resource for my view
mView.setImageBitmap(tempBmp);
mView.bringToFront();
}
Bir ScaleListener sınıf uygulamak olduğunu
@Override
public boolean onScale(ScaleGestureDetector detector)
{
drawAction = ZOOM;
scaleFactor *= detector.getScaleFactor();
scaleFactor = Math.max(MIN_ZOOM, Math.min(scaleFactor, MAX_ZOOM));
canvas.setScaleFactor(scaleFactor);
return true;
}
: onScale anlarında ScaleGestureDetector.SimpleOnScaleGestureListener
uzanır, benim tuval benim scalling oranı ne anlatmak
mView.setScaleX(factor);
mView.setScaleY(factor);
Şimdi, en önemli kısmı, onScaleEnd de, ben girişimi bir yöntemini çağırın:
Sonra benim Görünüm (tuval obj) de, sadece görünümüne ölçek kullanılıyor set Mevcut tuval bitmap AS OLMAK ve kardeşleri, her biri kendi büyüklüğü ve ofset ile huzur içinde uymak için benim görüşüme göndermek.
public void setScaleEnd()
{
//Lots of more boring code surpressed here
//....
//I store the bitmap that was contained at the ImageView
// IF anyone is present
previousBmp = ((BitmapDrawable)mView.getDrawable()).getBitmap();
//then, I create a brand new scaled bitmap,in order to
// acquire the same proportion of ZOOM that I've just applied
tempBmp = Bitmap.createScaledBitmap(previousBmp,
(int)(mView.getWidth()*scaleFactor),
(int)(mView.getHeight()*scaleFactor), true);
int height = (int)(mView.getHeight()*scaleFactor);
int width = (int)(mView.getWidth()*scaleFactor);
//set my matrix
mMatrix = new Matrix();
//give it the right proportion
mMatrix.postScale(scaleFactor, scaleFactor);
translationX = mView.getWidth()/2 - width/2;
translationY = mView.getHeight()/2 - height/2;
//give it some necessary translation amount
mMatrix.postTranslate(translationX, translationY);
//set the matrix to the view, and send the resized bitmap to my ImageView.
mView.setImageMatrix(mMatrix);
mView.setImageBitmap(tempBmp);
}
Şimdi, her şeyi sırasında denedim ben sadece bunu bir ölçek vererek tuvale düz gösterdi/miktarını çevirmek; bitmapler ile ayrı ayrı çalışmayı denedikten sonra yeni bir temiz tuvale geri gönderdi.
Yine de belirli bir ZOOM uygulandıktan sonra bu deplasman vuruşlarıma devam ediyorum! Sadece çizebilmek istiyorum; bir zoom ver; sonra biraz daha şeyler çizin ve çizdiğim yerde konturlar kalsın!
Bu mümkün mü?
Sadece S Note uygulamasıyla oynuyordum, tam olarak ne yapmaya çalıştığımı yapıyor.
Nasıl yardımcı olabileceğimi bilmiyorum, ama bu StackOverflow'ta gördüğüm en ayrıntılı soru, tebrikler! – Paladini
Teşekkürler @FernandoPaladini! –
Bu yoldan gittim ve iyi bir vektör oluşturma kitaplığı kullanmanızı tavsiye ederim. Android yollarının gerçekleştirilmesi, görüntülemede aşırı derecede yavaştır ve büyük boyutlarda (zum) düz eğimli değildir. İyi bir açıkveri uygulamasına bakın. –