1. 程式人生 > >Android-通過自定義View元件實現跟隨手指移動的ImageView元件

Android-通過自定義View元件實現跟隨手指移動的ImageView元件

在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);

    }