Android自定义一个图形单点移动缩小的效果
发布时间 - 2026-01-11 02:37:37 点击率:次先给大家展示下效果图,如果大家感觉不错,请参考实现代码

效果图如下所示:
代码如下所示:
public class MainActivity extends Activity {
View view;
public static final int DRAG = 1;
public static final int SCALE = 2;
int mode = 1;
int height = 10, width = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
view = findViewById(R.id.view);
}
float length = 1;
// 重写
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
// 多指触控
switch (event.getAction() & event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
mode = DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
Log.e("TAG", "多指移动");
mode = SCALE;
// 两个手指开始的长度是多少呢?
length = calc(event);
break;
case MotionEvent.ACTION_UP:
length = 1;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
// 1. 单个手指
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
width, height);
params.setMargins(x, y, 0, 0);
view.setLayoutParams(params);
} else {
// 2. 两个手指
float beilv = calc(event) / length;
width = (int) (view.getWidth() * beilv);
height = (int) (view.getHeight() * beilv);
Log.e("TAG", beilv + " " + width + " " + height);
FrameLayout.LayoutParams params = (LayoutParams) view
.getLayoutParams();
params.width = width;
params.height = height;
view.setLayoutParams(params);
}
break;
}
return true;
}
// 类 Ponint
public float calc(MotionEvent event) {
float x1 = event.getX();
float y1 = event.getY();
float x2 = event.getX(1);
float y2 = event.getY(1);
return (float) Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
}
xml类
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.lesson6_work1.MainActivity" >
<View
android:id="@+id/view"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/oval" />
</FrameLayout>
自己在shape中定义的一个圆的oval.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@android:color/holo_red_dark"/> </shape>
用自定义View的方式实现单点触控时拖动图片,跟着拖动点走
QiuView 类
public class QiuView extends View {
Paint paint = new Paint();
PointF point = new PointF();
public QiuView(Context context) {
super(context);
paint.setColor(Color.RED);
paint.setAntiAlias(true);
paint.setDither(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(point.x, point.y, 50, paint);
}
// 触摸事件
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
point.set(event.getX(), event.getY());
invalidate();
}
return true;
}
}
总结
以上所述是小编给大家介绍的Android自定义一个图形单点移动缩小的效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# 自定义图形
# 移动缩小
# Android自定义控件绘制基本图形基础入门
# Android自定义View实现shape图形绘制
# Android自定义view实现圆形、圆角和椭圆图片(BitmapShader图形渲染)
# 单点
# 自定义
# 拖动
# 所示
# 小编
# 触控
# 多指
# 在此
# 给大家
# 重写
# 所述
# 给我留言
# 请参考
# 感谢大家
# 先给
# 疑问请
# 有任何
# boolean
# onTouchEvent
# length
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何注册花生壳免费域名并搭建个人网站?
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
bootstrap日历插件datetimepicker使用方法
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
如何在云虚拟主机上快速搭建个人网站?
,交易猫的商品怎么发布到网站上去?
Swift中swift中的switch 语句
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
公司门户网站制作流程,华为官网怎么做?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
制作旅游网站html,怎样注册旅游网站?
Laravel如何与Inertia.js和Vue/React构建现代单页应用
Python数据仓库与ETL构建实战_Airflow调度流程详解
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
深入理解Android中的xmlns:tools属性
C#如何调用原生C++ COM对象详解
如何在云主机上快速搭建多站点网站?
长沙做网站要多少钱,长沙国安网络怎么样?
青岛网站建设如何选择本地服务器?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
网站建设保证美观性,需要考虑的几点问题!
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
Laravel如何升级到最新版本?(升级指南和步骤)
如何基于云服务器快速搭建网站及云盘系统?
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
jQuery中的100个技巧汇总
如何彻底卸载建站之星软件?
Android自定义控件实现温度旋转按钮效果
lovemo网页版地址 lovemo官网手机登录
如何用狗爹虚拟主机快速搭建网站?
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
Linux后台任务运行方法_nohup与&使用技巧【技巧】
Java解压缩zip - 解压缩多个文件或文件夹实例
如何在阿里云高效完成企业建站全流程?
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
如何构建满足综合性能需求的优质建站方案?
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel安装步骤详细教程_Laravel环境搭建指南
长沙企业网站制作哪家好,长沙水业集团官方网站?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Swift开发中switch语句值绑定模式
Laravel Session怎么存储_Laravel Session驱动配置详解
网站图片在线制作软件,怎么在图片上做链接?
微信推文制作网站有哪些,怎么做微信推文,急?
如何打造高效商业网站?建站目的决定转化率

