【Android】手机蜘蛛魔术的简易app例子
手机画面内容结合魔术手法在魔术表演中可以达到一种很强的视觉场景冲击比如手机里的蜘蛛爬出来的魔术这里做一个简易的app首先找到蜘蛛的png图片多做几张可以实现更好的爬动效果这里用一张来试验把图片中的白色背景转换为透明颜色from PIL import Image # 打开图片 img Image.open(spider0.png) img img.convert(RGBA) datas img.getdata() newData [] for item in datas: # 如果像素的颜色接近白色则将其改为完全透明 if item[0] 240 and item[1] 240 and item[2] 240: newData.append((255, 255, 255, 0)) else: newData.append(item) img.putdata(newData) img.save(spider.png, PNG)app例子package com.example.magic; import androidx.appcompat.app.AppCompatActivity; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.os.Bundle; // app/src/main/java/com/example/spiderphoto/MainActivity.java import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; public class MainActivity extends AppCompatActivity { private static final int REQUEST_CAMERA_PERMISSION 100; private static final int REQUEST_IMAGE_CAPTURE 101; private ImageView imageView; private View spiderView; private Button btnTakePhoto; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView findViewById(R.id.imageView); spiderView findViewById(R.id.spiderView); btnTakePhoto findViewById(R.id.btnTakePhoto); btnTakePhoto.setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { if (checkCameraPermission()) { dispatchTakePictureIntent(); } else { requestCameraPermission(); } } }); } private boolean checkCameraPermission() { return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) PackageManager.PERMISSION_GRANTED; } private void requestCameraPermission() { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION); } private void dispatchTakePictureIntent() { Intent takePictureIntent new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) ! null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } } Override public void onRequestPermissionsResult(int requestCode, NonNull String[] permissions, NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode REQUEST_CAMERA_PERMISSION) { if (grantResults.length 0 grantResults[0] PackageManager.PERMISSION_GRANTED) { dispatchTakePictureIntent(); } else { Toast.makeText(this, 需要相机权限才能拍照, Toast.LENGTH_SHORT).show(); } } } Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode REQUEST_IMAGE_CAPTURE resultCode RESULT_OK) { Bundle extras data.getExtras(); Bitmap imageBitmap (Bitmap) extras.get(data); // 显示照片 imageView.setImageBitmap(imageBitmap); imageView.setVisibility(View.VISIBLE); btnTakePhoto.setVisibility(View.GONE); // 启动蜘蛛动画 startSpiderCrawl(); } } private void startSpiderCrawl00() { ImageView spider findViewById(R.id.spiderView); spider.setVisibility(View.VISIBLE); // 获取屏幕高度用于计算移动距离 int screenHeight getResources().getDisplayMetrics().heightPixels; // 1. 主动画垂直向上移动从底部到顶部外 ObjectAnimator moveUp ObjectAnimator.ofFloat( spider, translationY, screenHeight - spider.getHeight(), // 起点底部减去自身高度 -spider.getHeight() * 1.2f // 终点顶部上方完全消失 ); moveUp.setDuration(8000); // 2. 辅助动画左右轻微晃动模拟爬行时的身体摆动 ObjectAnimator sway ObjectAnimator.ofFloat(spider, translationX, 0f, -20f, 0f, 20f, 0f); sway.setDuration(8000); sway.setRepeatCount(ObjectAnimator.INFINITE); // 循环晃动 // 3. 轻微缩放模拟腿部蹬地的弹跳感 ObjectAnimator bounce ObjectAnimator.ofFloat(spider, scaleY, 1.0f, 1.1f, 1.0f, 0.95f, 1.0f); bounce.setDuration(800); bounce.setRepeatCount(ObjectAnimator.INFINITE); bounce.setRepeatMode(ObjectAnimator.REVERSE); // 同时播放三个动画 AnimatorSet animatorSet new AnimatorSet(); animatorSet.playTogether(moveUp, sway, bounce); animatorSet.start(); // 动画结束后清理 moveUp.addListener(new android.animation.AnimatorListenerAdapter() { Override public void onAnimationEnd(android.animation.Animator animation) { spider.setVisibility(View.INVISIBLE); sway.cancel(); bounce.cancel(); btnTakePhoto.setVisibility(View.VISIBLE); } }); } private void startSpiderCrawl() { spiderView.setVisibility(View.VISIBLE); // 创建从底部到顶部的平移动画 TranslateAnimation animation new TranslateAnimation( Animation.RELATIVE_TO_PARENT, 0f, Animation.RELATIVE_TO_PARENT, 0f, Animation.RELATIVE_TO_PARENT, 0.5f, // 起点底部 Animation.RELATIVE_TO_PARENT, -1.2f // 终点顶部上方完全消失 ); animation.setDuration(8000); // 8秒 animation.setFillAfter(true); animation.setAnimationListener(new Animation.AnimationListener() { Override public void onAnimationStart(Animation animation) {} Override public void onAnimationEnd(Animation animation) { spiderView.setVisibility(View.INVISIBLE); btnTakePhoto.setVisibility(View.VISIBLE); // 恢复按钮 } Override public void onAnimationRepeat(Animation animation) {} }); spiderView.startAnimation(animation); } }

相关新闻

极速电影网免费在线观看|高清电影电视剧全集更新平台

极速电影网免费在线观看|高清电影电视剧全集更新平台

极速电影网以“高清电影电视剧全集更新平台”为核心定位,系统整理院线新片、热门剧集及各类影视资源。平台覆盖动作片、爱情片、科幻大片、悬疑剧情片以及国产剧、美剧、日韩剧等内容。关键词布局强调“免费在线观看电影”“电视剧全集免费观看”“热门影视资源更新…

2026/7/2 19:43:51 阅读更多 →
AI原生应用:个性化定制在医疗领域的应用实践

AI原生应用:个性化定制在医疗领域的应用实践

AI原生应用:医疗个性化定制的“数字裁缝”革命 关键词 AI原生应用、医疗个性化、多模态数据融合、可解释性AI、精准医疗 摘要 当医疗从“一刀切”走向“一人一方”,AI原生应用正成为这场变革的核心引擎。本文将带您深入探索:什么是真正的AI原生医疗应用?它如何像“数字…

2026/7/4 9:44:11 阅读更多 →
【毕业设计】SpringBoot+Vue+MySQL 图书商城管理系统平台源码+数据库+论文+部署文档

【毕业设计】SpringBoot+Vue+MySQL 图书商城管理系统平台源码+数据库+论文+部署文档

💡实话实说:C有自己的项目库存,不需要找别人拿货再加价。摘要 随着互联网技术的快速发展,电子商务已成为现代商业活动的重要组成部分。图书作为文化传播的重要载体,其线上销售平台的需求日益增长。传统的图书销售模式受…

2026/7/5 0:39:37 阅读更多 →

最新新闻

如何用Containerlab快速搭建企业级网络实验室:容器化网络测试的终极指南

如何用Containerlab快速搭建企业级网络实验室:容器化网络测试的终极指南

如何用Containerlab快速搭建企业级网络实验室:容器化网络测试的终极指南 【免费下载链接】containerlab container-based networking labs 项目地址: https://gitcode.com/gh_mirrors/co/containerlab 还在为搭建网络测试环境而头疼吗?传统方式需…

2026/7/5 21:18:33 阅读更多 →
Primer设计系统架构现代化升级策略:从技术债务清理到性能收益的完整迁移路线图

Primer设计系统架构现代化升级策略:从技术债务清理到性能收益的完整迁移路线图

Primer设计系统架构现代化升级策略:从技术债务清理到性能收益的完整迁移路线图 【免费下载链接】design Primer Design Guidelines 项目地址: https://gitcode.com/gh_mirrors/des/design 面对日益复杂的UI组件生态系统,Primer设计系统的版本升级…

2026/7/5 21:18:33 阅读更多 →
Vite 依赖预构建:开发启动快,也要看缓存失效

Vite 依赖预构建:开发启动快,也要看缓存失效

Vite 依赖预构建:开发启动快,也要看缓存失效 一、预构建解决的是依赖成本 Vite 开发环境启动快,很大一部分来自依赖预构建。它会把 CommonJS 或复杂依赖转换成更适合浏览器加载的 ESM,并缓存起来。平时它很安静,但一旦…

2026/7/5 21:16:33 阅读更多 →
ECC-算法原理

ECC-算法原理

1、ECC介绍 ECC,Error Checking and Correcting,是用于内存存储的数据不稳定时,发生错误时可以进行检查和纠正,ECC是基于奇偶校验的原理,多用于FLASH和SRAM中。 1.1 纠一检二(SEC-DED) &#xf…

2026/7/5 21:12:32 阅读更多 →
Trilogy高级特性:连接池管理与异步查询实现指南

Trilogy高级特性:连接池管理与异步查询实现指南

Trilogy高级特性:连接池管理与异步查询实现指南 【免费下载链接】trilogy Trilogy is a client library for MySQL-compatible database servers, designed for performance, flexibility, and ease of embedding. 项目地址: https://gitcode.com/gh_mirrors/tr/t…

2026/7/5 21:08:31 阅读更多 →
终极实战指南:深度解析阿里通义Wan2.1视频生成模型部署与优化

终极实战指南:深度解析阿里通义Wan2.1视频生成模型部署与优化

终极实战指南:深度解析阿里通义Wan2.1视频生成模型部署与优化 【免费下载链接】WanVideo_comfy 项目地址: https://ai.gitcode.com/hf_mirrors/Kijai/WanVideo_comfy 阿里通义Wan2.1视频生成模型是目前最先进的AI视频创作工具之一,能够实现从图片…

2026/7/5 21:08:31 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻