Android中实现自定义View组件并使其能跟随鼠标移动
场景
实现效果如下

注:
博客:
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 = ;
bitmapY = ;
} @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);
}
}
Android中实现自定义View组件并使其能跟随鼠标移动的更多相关文章
- Android中使用自定义View实现下载进度的显示
一般有下载功能的应用都会有这样一个场景,需要一个图标来标识不同的状态.之前在公司的项目中写过一个,今天抽空来整理一下. 一般下载都会有这么几种状态:未开始.等待.正在下载.下载结束,当然有时候会有下载 ...
- Android Studio开发基础之自定义View组件
一般情况下,不直接使用View和ViewGroup类,而是使用使用其子类.例如要显示一张图片可以用View类的子类ImageView,开发自定义View组件可分为两个主要步骤: 一.创建一个继承自an ...
- Android自定义View研究--View中的原点坐标和XML中布局自定义View时View触摸原点问题
这里只做个汇总~.~独一无二 文章出处:http://blog.csdn.net/djy1992/article/details/9715047 Android自定义View研究--View中的原点坐 ...
- Android开发进阶——自定义View的使用及其原理探索
在Android开发中,系统提供给我们的UI控件是有限的,当我们需要使用一些特殊的控件的时候,只靠系统提供的控件,可能无法达到我们想要的效果,这时,就需要我们自定义一些控件,来完成我们想要的效果了.下 ...
- Android中制作自定义dialog对话框的实例
http://www.jb51.net/article/83319.htm 这篇文章主要介绍了Android中制作自定义dialog对话框的实例分享,安卓自带的Dialog显然不够用,因而我们要继 ...
- iOS 在UITableViewCell中加入自定义view时view的frame设定注意
由于需要重用同一个布局,于是在cellForRowAtIndexPath中把自定义view加在了cell上,我是这样设定view的frame的 var screenFrame = UIScreen.m ...
- Android中的自定义Adapter(继承自BaseAdapter)——与系统Adapter的调用方法一致——含ViewHolder显示效率的优化(转)
Android中很多地方使用的是适配器(Adapter)机制,那我们就要好好把这个Adapter利用起来,并且用出自己的特色,来符合我们自行设计的需要喽~~~ 下面先上一个例子,是使用ViewHold ...
- 从一个简洁的进度刻度绘制中了解自定义View的思路流程
先看效果(原谅我的渣像素),进度的刻度.宽度.颜色可以随意设定: [项目github地址: https://github.com/zhangke3016/CircleLoading] 实现起来并不难, ...
- Android 中使用自定义字体的方法
1.Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace 2.在Android中可以引入其他字体 . <?xml version="1.0 ...
随机推荐
- 软件工程概论 网站开发要掌握的技术 &登录界面
1.网站系统开发需要掌握的技术 一.界面和用户体验(Interface and User Experience) 1.1 知道如何在基本不影响用户使用的情况下升级网站.通常来说,你必须有版本控制系统( ...
- QEMU和KVM的关系
首先KVM(Kernel Virtual Machine)是Linux的一个内核驱动模块,它能够让Linux主机成为一个Hypervisor(虚拟机监控器).在支持VMX(Virtual Machin ...
- LeetCode-指针法
LeetCode刷题总结-指针法 方法介绍:指针法主要使用在一组按从小到大排好序的数组中,当按照条件查找对应元素时,在数组的前后定义两个指针,当两个指针代表的元素进行运算时:若结果大于目标值,则左移右 ...
- C语言博客作业8
本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 作业地址 我在这个课程的目标是 熟练运用C语言来写代码 这个作业在那个具体方面帮助我实现目标 while语句的运用 参考文献 ...
- 3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降. ...
- 《快乐编程大本营》java语言训练班 2课:java的变量
<快乐编程大本营>java语言训练班 2课:java的变量 1变量介绍 2变量分类,数值变量 3变量分类-字符串变量 4变量分类-布尔变量 5变量分类-对象 http://code6g.c ...
- 死磕java(1)
java入门 package com.sougn.new1; public class new1 { /** * @param args */ public static void main ...
- vs2012 编译 zlib 1.2.8
1. 下载 http://zlib.net/zlib-1.2.8.tar.gz 2. 编译 - 解压到目录,如d:\library - 开启VS2012的Command Pro ...
- Spanner的TrueTime与事务
Spanner的TrueTime与事务 Spanner是谷歌的分布式数据库,发表于著名论文Spanner: Google's Globally-Distributed Database,它创造性的采用 ...
- sqlserver backup and restore -- partital restore
Like a tratitional database, sqlserver not only could resotre full database but also do restore one ...