自定义支持360度旋转的车模View
自定义Touch360ImageView的代码如下:
package com.example.myapplication;import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.LevelListDrawable;
import android.util.AttributeSet;
import android.view.MotionEvent;public class Touch360ImageView extends androidx.appcompat.widget.AppCompatImageView {private float mDownX;private float mLastX;private long mTouchTime;private int mImageLevel;private int mDrawableCount;private static final int TOUCH_SPACING = 5; //触摸间距private static final int TIME_INTERVAL = 200; //触摸时间间隔public Touch360ImageView(Context context) {this(context, null);}public Touch360ImageView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public Touch360ImageView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.Touch360ImageView);int arrayId = typedArray.getResourceId(R.styleable.Touch360ImageView_drawableArray, R.array.image_list);typedArray.recycle();TypedArray drawableArray = context.getResources().obtainTypedArray(arrayId);LevelListDrawable levelListDrawable = new LevelListDrawable();mDrawableCount = drawableArray.length();for (int i = 0; i < mDrawableCount; i++) {levelListDrawable.addLevel(0, i, getResources().getDrawable(drawableArray.getResourceId(i, 0)));}setImageDrawable(levelListDrawable);drawableArray.recycle();}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mDownX = event.getRawX();mLastX = mDownX;mTouchTime = System.currentTimeMillis();break;case MotionEvent.ACTION_MOVE:int dx = (int) (event.getRawX() - mLastX);mLastX = event.getRawX();if (dx > TOUCH_SPACING) {mImageLevel++;if (mImageLevel >= mDrawableCount) {mImageLevel = 0;}} else if (dx < -TOUCH_SPACING) {mImageLevel--;if (mImageLevel < 0) {mImageLevel = mDrawableCount - 1;}}setImageLevel(mImageLevel);break;case MotionEvent.ACTION_UP:if (System.currentTimeMillis() - mTouchTime < TIME_INTERVAL && Math.abs(mDownX - event.getRawX()) < TOUCH_SPACING) {performClick();return false;}break;}return true;}
}
可根据效果调整触摸间距和时间间隔以达到更好的效果。支持根据自定义图片数量来刷新图片。
布局文件中的代码
<com.example.myapplication.Touch360ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"app:drawableArray="@array/image_list"/>
arrays.xml的数组定义如下
<array name="image_list"><item>@drawable/car_0001</item><item>@drawable/car_0010</item><item>@drawable/car_0020</item><item>@drawable/car_0030</item><item>@drawable/car_0040</item><item>@drawable/car_0050</item><item>@drawable/car_0060</item><item>@drawable/car_0070</item><item>@drawable/car_0080</item><item>@drawable/car_0090</item><item>@drawable/car_0100</item><item>@drawable/car_0110</item><item>@drawable/car_0120</item><item>@drawable/car_0130</item><item>@drawable/car_0140</item><item>@drawable/car_0150</item><item>@drawable/car_0160</item><item>@drawable/car_0170</item><item>@drawable/car_0180</item><item>@drawable/car_0190</item><item>@drawable/car_0200</item><item>@drawable/car_0210</item><item>@drawable/car_0220</item><item>@drawable/car_0230</item><item>@drawable/car_0240</item><item>@drawable/car_0250</item><item>@drawable/car_0260</item><item>@drawable/car_0270</item><item>@drawable/car_0280</item><item>@drawable/car_0290</item><item>@drawable/car_0300</item><item>@drawable/car_0310</item><item>@drawable/car_0320</item><item>@drawable/car_0330</item><item>@drawable/car_0340</item><item>@drawable/car_0350</item><item>@drawable/car_0360</item></array>
这里用到37张图片,实际上36张足够,最后一张图片car_0360和第一张图片car_0001是同一图片。当然尽量不要放入更多的图片以免OOM。
attrs.xml中自定义图片数组引用属性如下:
<declare-styleable name="Touch360ImageView"><attr name="drawableArray" format="reference"/></declare-styleable>
最终效果如下:
这是替换3D效果的一种简单方案,要实现更好的360旋转或更高级的效果还是得依赖3D引擎,可以利用第三方3D软件生成android所需要的jar和so库集成在android项目里,本篇不做详细描述。
自定义支持360度旋转的车模View相关推荐
- 【精心挑选】10款基于 jQuery 的图片360度旋转插件
之前的文章向大家分享了实现网站功能的各种优秀的 jQuery 插件,今天这篇文章向大家推荐10款基于 jQuery 的图片360度旋转插件,同时还有非常详细的制作教程可以学习和参考.图片旋转展示是一种 ...
- jQuery 图像 360 度旋转插件
13 款最热门的 jQuery 图像 360 度旋转插件推荐 时间:02月07日 在 web 页面上使用 jQuery 图像 360 度旋转插件是最美也是最方便的显示图像的方式.这些超级棒的 360° ...
- 精心挑选10款基于 jQuery 的图片360度旋转插件
之前的文章向大家分享了实现网站功能的各种优秀的 jQuery 插件,今天这篇文章向大家推荐10款基于 jQuery 的图片360度旋转插件,同时还有非常详细的制作教程可以学习和参考.图片旋转展示是一种 ...
- 360环物如何发布html,制作网页上的360度旋转全景图PixMaker使用详细教程
PixMaker是一个简单方便的360度全景图片制作软件,它可以将描写一个环型场景的多个连续图片无缝地接合在一起,形成一个360度"场景"图片.可以在网页上播放,使你的页面更加生动 ...
- spritespin.js插件实现图片360度旋转
1. 官网:http://spritespin.ginie.eu/: SpriteSpin是一个jQuery插件,可将图像帧转换为动画.它需要一个图像阵列或一个精确的精灵片,并像翻转书一样逐帧播放它们 ...
- 【Blender】使用Blender渲染一段360度旋转的动画
目录 一.前言 二.方法描述 三.渲染设置 四.结果 一.前言 本文主要讲述了如何使用Blender渲染一段物体360度旋转的动画. 渲染好的效果如下: 二.方法描述 第一步:shift+A,我们在B ...
- css3动画旋转360度,CSS3旋转动画(360度旋转、旋转放大、放大、移动) 用法和实例...
CSS3旋转动画(360度旋转.旋转放大.放大.移动) 用法和实例 Internet Explorer 10.Firefox.Opera 支持 transform 属性. Internet Explo ...
- css3 向上淡入 小图标翻转 360度旋转
代码 <!DOCTYPE HTML> <html> <style type="text/css">div {border: 1px solid ...
- 手机电路板文件_手机中框自动点胶机,360度旋转点胶,解决高精度点胶问题
全自动点胶机应用在很多类型的半成品中,包括手机中框涂胶与金属扣涂料等,而手机飞速发展的同时对 手机质量的要求也越来越高,自然对点胶机的要求也越来越高.下面我们一起来了解下蜻蜓智能针对手机边框点胶难的问 ...
最新文章
- 南通一酒店搞了个“虎景房”,这睡得着?
- 机器学习算法加强——XGBoost实践
- 子程序与中断程序的异同_【干货】plc怎样理解中断功能,其作用是什么?
- 诊断SQLSERVER问题常用的日志
- java: 程序包lombok不存在_Java开发神器:Lombok 学习指南
- C程序中如何区分windowsx86,x64
- java短信验证码实现_社交APP开发短信验证是通过什么技术实现
- Caffe学习:使用pycaffe绘制网络结构
- 【读书笔记】深入浅出数据分析
- Python游戏篇:细节之大型游戏爆炸效果(附代码)
- Mac下实现Word文档批量转换为PDF
- Springboot+Vue开发的简单的后台管理系统
- 显微镜自动聚焦原理是什么_光学显微镜自动聚焦算法研究
- 2022年虎年新春致地球上全体读者朋友们的一封书信
- 01 复杂度分析(上):时间、空间复杂度讲解
- 重磅 | Hinton、LeCun、Bengio联合署名深度学习综述,《Nature》纪念人工智能60周年专题...
- python 四维数据怎么看性别_四维b超数据怎么看性别
- oracle11g 客户端字符集,查看 Oracle11g 的字符集
- 黑马程序员C++笔记
- 0927-1这张图可得记一辈子了
热门文章
- 前端文件下载的打开方式
- 在html5绘制直线的两个方法,html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点...
- Vue项目打包部署到服务器(Linux)
- INTJ型人格适合选择哪些专业?
- Javascript安全那些事
- 线下各店铺更新换代刷脸服务商抓住机会
- ios 微信小程序 chooseImage 相机拍照跳转页面崩溃
- 视频自媒体快速落地,新浪SHOW缘何“快人一步”?
- GoDaddy优惠码
- ZWCAD Software ZW3D 2012 SP2 v16 20-Lz0