Android-通過自定義View元件實現跟隨手指移動的ImageView元件
阿新 • • 發佈:2019-02-15
在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);
}