首页 > 编程语言 >直播小程序源码,自定义支持360度旋转的View

直播小程序源码,自定义支持360度旋转的View

时间:2023-06-08 14:23:46浏览次数:81  
标签:自定义 int private 源码 context android mImageLevel 360 Touch360ImageView

直播小程序源码,自定义支持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();
    }
    @Override
    public 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.Touch360ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        app:drawableArray="@array/image_list"/>

 

 以上就是 直播小程序源码,自定义支持360度旋转的View,更多内容欢迎关注之后的文章

 

标签:自定义,int,private,源码,context,android,mImageLevel,360,Touch360ImageView
From: https://www.cnblogs.com/yunbaomengnan/p/17466334.html

相关文章

  • 视频直播网站源码,自定义气泡效果(BubbleView)
    视频直播网站源码,自定义气泡效果(BubbleView)代码如下: packagecom.example.myapplication;importandroid.content.Context;importandroid.graphics.BlurMaskFilter;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandr......
  • 中国象棋程序的设计与实现(二)--源码
    本篇将正式公布中国象棋程序–高级版–楚汉棋兵的所有源码。介绍一些相关信息,如源码下载地址、QQ交流群、源码结构、版权声明。其它更多文档,如毕业设计论文、项目架构图图、心得体会、开发记录,将在本月全部公布。有兴趣的同学,可以趁着中秋节3天、国庆7天等假期,进行研究。我也将......
  • 使用ImportBeanDefinitionRegistrar处理自定义注解将类注册到容器中
    START两个自定义注解:@Documented@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Import(LogRegistry.class)public@interfaceEnableLog{StringbasePackage()default"";}该注解的作用是扫描指定的basePackage目录中使用了@Log注解的类,并将这......
  • 直播源码app开发技术特效功能的实现
    网络时代的发展使得直播源码app平台日渐火爆,抖音就是这些火爆的直播源码app平台的其中之一。大家在使用抖音看直播时有没有看见过这样的情况,在某一个直播间里,正在直播的人的脸在屏幕中会变长变宽,甚至是变得扭曲,或者是那个人会带上西瓜贴纸等其他水果贴纸,又或是在屏幕上看见动漫人物......
  • Swagger 自定义输出文档
    Swagger作为Java开发中常用的接口文档生成组件,绝大部分情况下都可以满足我们的业务需求。但有些时候依然有些不足,比如针对系统中某些特殊接口需要作出一些增强。我自己在使用Swagger时候遇到需要将base_path消除并直接拼接到接口路径上的情形。一共寻找到两种方式......
  • AI编译器CINN v.s TVM 中CodeGen 源码解读
    如下的技术点梳理仅以「日常优化工作」为牵引点,涉及哪个模块,就具体去看哪个模块的代码。一、CINN框架CINN中CodeGen之后的代码编译主要交给了Compiler类来负责。核心的函数主要是:Build(ir::Module&,string&code)Lookup(string&fn_name)classCompilerfinal{publ......
  • 想要提高办公效率,可以采用表单自定义工具
    当前,随着社会的进步和科技的发展,表单自定义工具逐渐在现代化办公场所中得到重用和喜爱。因为它的灵活、简便、易操作等优势特性,使得其突破了传统表单制作工具的局限,成为广大中大型企业实现流程化管理和数字化进程的得力助手。如果您也想打破传统表单限制,实现提质增效的办公目的,不......
  • JAVA的springboot+vue企业客户信息反馈平台,附源码+数据库+文档+PPT
    1、项目介绍企业客户信息反馈平台能够通过互联网得到广泛的、全面的宣传,让尽可能多的用户了解和熟知企业客户信息反馈平台的便捷高效,不仅为客户提供了服务,而且也推广了自己,让更多的客户了解自己。对于企业客户信息反馈而言,若拥有自己的平台,通过平台得到更好的管理,同时提升了形象......
  • 【深入浅出Spring原理及实战】「夯实基础系列」360全方位分析和探究SpringMVC的核心原
    SpringMVC简介SpringWebMVC是一种基于Java的轻量级Web框架,它实现了WebMVC设计模式,使用VC架构模式的思想将web层进行职责解耦。这种请求驱动类型的框架使用请求-响应模型,旨在简化Web开发过程。使用SpringWebMVC,我们可以更加高效地开发Web应用程序,而不必为了每个接口编写一个Ser......
  • Shiro自定义异常无法被捕获总是抛出AuthenticationException解决方案
    问题描述配置Realm之后,发现在Realm中抛出的异常被无法捕获,最后抛出AuthenticationException异场景再现 下面是errorlog2023-06-0711:49:26.131[TID:N/A][][http-nio-9]ERRORo.s.c.sleuth.instrument.web.ExceptionLoggingFilter:54-Uncaughtexceptionthrow......