安卓-07-開發自定義的View
阿新 • • 發佈:2019-04-01
save get ner odi 自定義 span appcompat utf 對象
通常不實用View和ViewGroup類
可以使用繼承View的自定義的View類
思路是:
創建繼承View的自定義類, 在MainActivity.java 中創建自定義類的對象
實踐--跟隨手指移動的小兔子
XML : 設置背景圖片, id
1 <?xml version="1.0" encoding="utf-8"?> 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto"4 xmlns:tools="http://schemas.android.com/tools" 5 android:id="@+id/mylayout" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:background="@mipmap/earth" 9 tools:context=".MainActivity"> 10 11 </FrameLayout>
創建Rabbit類
1 package com.example.myview; 2 3 import android.content.Context; 4 import android.graphics.Bitmap; 5 import android.graphics.BitmapFactory; 6 import android.graphics.Canvas; 7 import android.graphics.Paint; 8 import android.view.View; 9 10 public class RabbitView extends View {11 public float bitmapX; 12 public float bitmapY; 13 public RabbitView(Context context) { 14 super(context); 15 bitmapX = 290; 16 bitmapY = 130; 17 } 18 19 @Override 20 protected void onDraw(Canvas canvas) { 21 super.onDraw(canvas); 22 Paint paint = new Paint(); // 創建畫筆對象 23 Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.mipmap.robbit); // 設置圖像, 將兔子圖片作為參數傳入 24 canvas.drawBitmap(bitmap, bitmapX, bitmapY, paint); // 通過canvas組件畫出兔子 25 if(bitmap.isRecycled()) { // 回收 26 bitmap.recycle(); 27 } 28 } 29 }
在MainActivity.java類中創建Rabbit類的對象並設置Touch事件
1 package com.example.myview; 2 3 import android.support.v7.app.AppCompatActivity; 4 import android.os.Bundle; 5 import android.view.MotionEvent; 6 import android.view.View; 7 import android.widget.FrameLayout; 8 9 public class MainActivity extends AppCompatActivity { 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 FrameLayout frameLayout = findViewById(R.id.mylayout); 16 final RabbitView rabbitView = new RabbitView(this); 17 rabbitView.setOnTouchListener(new View.OnTouchListener() { 18 @Override 19 public boolean onTouch(View v, MotionEvent event) { 20 rabbitView.bitmapX = event.getX(); 21 rabbitView.bitmapY = event.getY(); 22 rabbitView.invalidate(); 23 return true; 24 } 25 }); 26 frameLayout.addView(rabbitView); 27 } 28 }
安卓-07-開發自定義的View