Android中实现自定义View组件并使其能跟随鼠标移动
程序员文章站
2022-03-25 18:01:21
场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 新建Android项目,首先打开activity_main.xml 修改其为FrameLayout帧布局管理 ......
场景
实现效果如下
注:
博客:
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
新建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); } }
上一篇: 寻找两个有序数组的中位数
下一篇: LNMP环境配置