Android右滑关闭Activity界面功能-自定义控件实现

引言

Android右滑关闭Activity界面功能,网上已经有好多优秀的开源代码和项目,不过大部分都是结合ViewDragHelper来实现的,这里要讨论的是通过结合ValueAnimator来实现,目前我的控件只实现了从左往右(上往下)滑关闭界面。

需求

  • 在界面上从左往右滑,View位置根据手势移动。
  • 只拦截左右滑动,上下方向的滑动无影响。
  • 子View的左右滑动事件无影响。

预览图

image

实现思路

  • SwipeBackLayout:左右滑动View
  • onInterceptTouchEvent:该方法只要做左右移动拦截,上下移动不拦截。
  • ValueAnimator:该动画只要改变SwipeBackLayout View的位置,在ACTION_UP和界面打开时调用。
  • ACTION_MOVE时,根据移动的X位移,修改SwipeBackLayout View的位置。

主要代码分析

onFinishInflate

image

该方法只要实现两种方式,一种是通过布局xml文件来初始化SwipeBackLayout;另外一种是新new SwipeBackLayout。

onLayout

image

image

该方法只要是在初始化成功之后,修改SwipeBackLayout的位置。

onInterceptTouchEvent

image

image

该方法只要是拦截左右移动和判断是否在左右不拦截的子View集合里面。

onTouchEvent

image

该方法只要在用户左右移动的时候,修改SwipeBackLayout的位置。

image

image

该方法只要是ACTION_UP的时候,需要判断当前SwipeBackLayout的left位置,如果left位置小于屏幕的一半,则使用ValueAnimator动画,让SwipeBackLayout位置还原到正常位置。否则,关闭SwipeBackLayout。

dispatchDraw

image

该方法只要是在SwipeBackLayout移动的时候,绘画阴影。

源码

具体的代码和调用Demo,可到源码地址处查看:https://github.com/zhangliangming/SwipeBackLayout.git

最后

如果有问题,可到github上面留言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 实现步数统计的功能可以使用Android系统提供的传感器API,例如计步器传感器。而加入数据库的功能,则需要使用Android系统提供的SQLite数据库API。 下面是一个简单的实现步数统计并加入数据库的自定义控件的示例: 1. 创建一个自定义控件类,继承自View或其子类。 ``` public class StepCounterView extends View implements SensorEventListener { private SensorManager sensorManager; private Sensor stepSensor; private int stepCount = 0; private boolean isSensorActive = false; public StepCounterView(Context context) { super(context); init(); } public StepCounterView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public StepCounterView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { sensorManager = (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE); stepSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); if (stepSensor != null) { sensorManager.registerListener(this, stepSensor, SensorManager.SENSOR_DELAY_NORMAL); isSensorActive = true; } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (isSensorActive) { sensorManager.unregisterListener(this); isSensorActive = false; } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制步数 String text = "步数:" + stepCount; Paint paint = new Paint(); paint.setColor(Color.BLACK); paint.setTextSize(50); canvas.drawText(text, 0, 50, paint); } @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) { stepCount = (int) event.values[0]; // 更新UI invalidate(); // 将步数保存到数据库中 saveToDatabase(stepCount); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } private void saveToDatabase(int stepCount) { // 创建数据库 SQLiteDatabase db = getContext().openOrCreateDatabase("step.db", Context.MODE_PRIVATE, null); // 创建表 db.execSQL("CREATE TABLE IF NOT EXISTS step (id INTEGER PRIMARY KEY AUTOINCREMENT, step_count INTEGER)"); // 插入数据 ContentValues values = new ContentValues(); values.put("step_count", stepCount); db.insert("step", null, values); // 关闭数据库 db.close(); } } ``` 2. 在布局文件中添加自定义控件。 ``` <com.example.StepCounterView android:layout_width="match_parent" android:layout_height="wrap_content" /> ``` 3. 运行程序,即可看到实时步数的显示,并且步数也会被保存到名为“step.db”的数据库中。 ### 回答2: 要实现Android中的自定义控件实现步数统计并加入数据库的功能,可以按照以下步骤进行: 1. 创建一个自定义控件,继承自Android中的View类,并实现自己的界面布局和逻辑。 2. 在自定义控件中,可以使用SensorManager类来获取传感器数据,如加速度传感器或计步传感器,用于实时地获取步数信息。 3. 在自定义控件中,可以使用SQLiteOpenHelper类来创建一个数据库,并定义数据库的表结构,用于存储步数信息。 4. 在自定义控件中,可以使用ContentValues类来组装步数信息的数据,并通过SQLiteDatabase类来插入数据库中。 5. 在自定义控件中,可以使用SharedPreferences类来保存用户的步数目标和历史步数数据,以便实现目标的设定和步数统计的管理。 6. 在自定义控件中,可以使用Paint类来绘制步数信息的界面,如文字、图标等,以便将统计结果显示在界面上。 7. 在使用自定义控件Activity中,可以通过findViewById方法找到该控件,并根据需要设置控件的属性和监听器。 通过以上步骤,就可以实现Android中的自定义控件实现步数统计并加入数据库的功能。用户可以使用该控件来实时统计步数,并将步数信息存储到数据库中,方便后续查看和管理。 ### 回答3: 要实现 Android 中的自定义控件实现步数统计并加入数据库的功能,可以按照以下步骤进行。 首先,创建一个自定义的视图类,继承自 Android 的 View 类。在该类中,定义用于展示步数的 TextView 控件,并提供一些方法用于更新步数的显示。 其次,为该自定义视图类添加一些必要的属性和方法,比如记录当前步数的变量、获取、设置步数的方法等。 然后,为了实现步数的统计功能,我们需要在该自定义视图类中添加与传感器相关的代码。可以使用 Android 提供的传感器 API,如 SensorManager、SensorEventListener 等。通过注册传感器监听器,并在监听器中根据步行算法来统计步数的变化。 接着,我们需要将统计到的步数存入数据库中。首先,创建一个数据库类,继承自 Android 的 SQLiteOpenHelper 类。在该类中,定义用于创建和升级数据库的方法,并提供一些方便操作数据库的方法,比如插入数据、查询数据等。 在自定义视图类中,获取到步数后,调用数据库类的方法将步数存入数据库中。可以通过 ContentValues 类来组织要插入的数据,并使用 SQLiteDatabase 类的 insert() 方法将数据插入到数据库中。 最后,在使用该自定义控件Activity 中,实例化数据库类,并在合适的地方调用自定义视图类的方法来更新步数的显示,并将获取到的步数存入数据库中。 通过以上步骤,我们就可以实现 Android自定义控件实现步数统计并加入数据库的功能。同时,我们可以通过数据库来保存历史步数数据,并在需要的时候进行查询和展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值