場景 實現效果如下 註: 博客: https://blog.csdn.net/badao_liumang_qizhi 關註公眾號 霸道的程式猿 獲取編程相關電子書、教程推送與免費下載。 實現 新建Android項目,首先打開activity_main.xml 修改其為FrameLayout幀佈局管理 ...
場景
實現效果如下
註:
博客:
https://blog.csdn.net/badao_liumang_qizhi
關註公眾號
霸道的程式猿
獲取編程相關電子書、教程推送與免費下載。
實現
新建Android項目,首先打開activity_main.xml
修改其為FrameLayout幀佈局管理器,並添加Id屬性和背景照片
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/frameLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg" tools:context=".MainActivity"> </FrameLayout>
然後在包下新建自定View類dog類
使其繼承View類,然後聲明兩個float變數來存儲其位置。在其構造方法中對位置進行初始化。
然後重寫onDraw方法,根據指定的位置進行重繪view
package com.badao.defineview; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.view.View; public class DogView extends View { public float bitmapX; public float bitmapY; public DogView(Context context) { super(context); bitmapX = 290; bitmapY = 130; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //新建畫筆對象 Paint paint = new Paint(); //獲取照片 Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.dog); //繪製照片 canvas.drawBitmap(bitmap,bitmapX,bitmapY,paint); //回收圖片 if(bitmap.isRecycled()) { bitmap.recycle(); } } }
然後回到MainActivity,獲取layout,聲明自定義的view並設置觸摸事件監聽器,將觸摸位置的坐標賦值給自定義view的位置,然後重繪view,並將其添加到layout中
package com.badao.defineview; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取layout FrameLayout frameLayout = (FrameLayout) findViewById(R.id.frameLayout); //聲明自定義View final DogView dogView = new DogView(this); //設置觸摸事件監聽器 dogView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //獲取觸摸位置的X的坐標 dogView.bitmapX = event.getX(); //獲取觸摸位置Y的坐標 dogView.bitmapY = event.getY(); //需要重繪view dogView.invalidate(); return true; } }); //將自定義view添加到layout中 frameLayout.addView(dogView); } }