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驱动配置详解  网站图片在线制作软件,怎么在图片上做链接?  微信推文制作网站有哪些,怎么做微信推文,急?  如何打造高效商业网站?建站目的决定转化率