在Android應用程式中繪製一個跟隨手指的小兔子,當手指在螢幕上拖動時,小兔子將跟隨手指拖動的軌跡移動。

實現本例項時,首先需要先繼承Android.view.View類,然後通過重寫其onDraw()方法設定小兔子的預設顯示位置,最後重寫其觸控事件,該事件中設定兔子隨手指而移動。

實現過程:
1.修改res/layout/main_activity.xml檔案,刪除預設的LinearLayout和TextView元件,然後新增一個幀佈局FrameLayout,並且設定其背景和id屬性

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mylayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background" >

</FrameLayout>

2.建立一個名為RabbitView的自定義View類,繼承自android.view.View類,重寫帶一個引數Context引數的構造方法和onDraw()方法。在構造方法中設定小兔子的預設座標,在onDraw()方法中根據圖片繪製小兔子。

public class RabbitView extends View {
    public float bitmapX;
    public float bitmapY;

    public RabbitView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        bitmapX=290;
        bitmapY=130;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        Paint paint=new Paint();
        Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(), R.drawable.rabbit);
        canvas.drawBitmap(bitmap, bitmapX, bitmapY,paint);
        if(bitmap.isRecycled())
        {
            bitmap.recycle();
        }
    }

}

3.在MainActivity的onCreate()方法中,首先獲取幀佈局管理器,並例項化小兔子rabbit,然後為rabbit新增觸控事件監聽器,在重寫的觸控事件中設定rabbit的顯示位置,並重繪rabbit元件,最後將rabbit新增到佈局管理器中。

FrameLayout frameLayout=(FrameLayout)findViewById(R.id.mylayout);
        final RabbitView rabbit=new RabbitView(MainActivity.this);

        rabbit.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                rabbit.bitmapX=event.getX();
                rabbit.bitmapY=event.getY();
                rabbit.invalidate();
                return true;
            }
        });
        frameLayout.addView(rabbit);

    }