Эффект масштаба на Android SurfaceView - PullRequest
12 голосов
/ 29 сентября 2011

Я занимаюсь разработкой автомобильной гонки Я могу двигаться, останавливаться, ускоряться. Но я хочу, чтобы при нажатии на экран car(bitmap of car image) выглядело так, как будто оно прыгнуло на своем месте. Я использую surfaceview для рисования вида

Я не хочу использовать 3D openGL . Любая помощь очень ценится

1 Ответ

6 голосов
/ 15 октября 2011

наконец я использовал. На сенсорном событии я создаю большее растровое изображение и рисую его в том же месте.Так что это даст эффект увеличения

Bitmap bitmapToZoom;  // Create a Bitmap
// Now zoom it 
bitmapToZoom=Bitmap.createScaledBitmap(bitmapToZoom, bitmapToZoom.getWidth()+30,bitmapToZoom.getHeight()+30, null); 
//now draw it again
canvas.drawBitmap(bitmapToZoom, 0,0,null);

Так что теперь, наконец, масштабирование актера на сенсорном коде будет таким:Имя класса ZoomonTouc.java

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.RectF;
import android.view.MotionEvent;
import android.view.SurfaceView;

public class ZoomonTouc extends SurfaceView {
public Bitmap mMyChracter;

public ZoomonTouc(Context context) {
    super(context);
    mMyChracter = BitmapFactory.decodeResource(context.getResources(),
            R.drawable.ic_launcher);
    setWillNotDraw(false);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawBitmap(mMyChracter, mMyChracter.getWidth()/2, mMyChracter.getHeight()/2, null);
    invalidate();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    RectF rectF = new RectF(mMyChracter.getWidth()/2, mMyChracter.getHeight()/2, mMyChracter.getWidth() + 100,
            mMyChracter.getHeight() + 100);
    if (rectF.contains(event.getX(), event.getY())) {
        mMyChracter = Bitmap.createScaledBitmap(mMyChracter,
                mMyChracter.getWidth() + 10, mMyChracter.getHeight() + 10,
                false);
    }
    return true;
}

}

Чтобы проверить это правильно, создайте одно действие и установите над поверхностью фон деятельности

setContentView(new ZoomonTouc(this));
...