热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

触摸滑动实现直线选择

先看效果图:源代码:packagecom.momo.selectvalue;importandroid.app.Activity;importandroid.

先看效果图:

,

源代码:

package com.momo.selectvalue;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity implements OnTouchListener {

	private ImageView strength_select;
	private LinearLayout strength_select_bg;
	private LinearLayout strength_select_tvs;
	private int typeStrength = 1 ;
	private int lastX;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		strength_select = (ImageView) findViewById(R.id.strength_select);
		strength_select.setOnTouchListener(this);
		strength_select_bg = (LinearLayout)findViewById(R.id.strength_select_bg);
		strength_select_tvs = (LinearLayout) findViewById(R.id.strength_select_tvs);
		strength_select_bg.setOnTouchListener(this);
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// TODO Auto-generated method stub
		if(v.getId() == R.id.strength_select_bg){
			setSlidePointPosition((int) event.getX());
			return false;
		}
		int width = strength_select_bg.getMeasuredWidth();
		int pointWidth = v.getWidth();
		switch(event.getAction()){
		case MotionEvent.ACTION_DOWN:
			lastX = (int) event.getRawX();
			strength_select_bg.requestDisallowInterceptTouchEvent(true);
			break;
		case MotionEvent.ACTION_MOVE:
			int detelX = (int) (event.getRawX() - lastX);
			int left = v.getLeft() + detelX;
			int right = left + pointWidth;
			if(right > width || left <0){
				return false;
			}
			v.layout(left, v.getTop(), right, v.getBottom());
			lastX = (int) event.getRawX();
			break;
		case MotionEvent.ACTION_CANCEL:
		case MotionEvent.ACTION_UP:
			int left2 = (int) (v.getLeft() + pointWidth*0.5);
			setSlidePointPosition(left2);
			break;
			
		}
		return false;
	}
	
	private void setSlidePointPosition(int leftPosition){
		((TextView)strength_select_tvs.getChildAt(typeStrength*2-2)).setTextSize(12);
		int pointWidth = strength_select.getMeasuredWidth();
		int width = strength_select_bg.getMeasuredWidth();
		int unitWidth = (width - pointWidth)/6;
		ImageView v = strength_select;
		if(leftPosition > unitWidth*5+pointWidth/2){
			v.layout(width-pointWidth, v.getTop(), width, v.getBottom());
			((TextView)strength_select_tvs.getChildAt(6)).setTextSize(18);
			typeStrength = 4;
		}else if(leftPosition <= unitWidth*5+pointWidth/2 && leftPosition > unitWidth*3+pointWidth/2){
			v.layout(unitWidth*4, v.getTop(), unitWidth*4+pointWidth, v.getBottom());
			((TextView)strength_select_tvs.getChildAt(4)).setTextSize(18);
			typeStrength = 3;
		}else if(leftPosition > unitWidth+pointWidth/2 && leftPosition <= unitWidth*3+pointWidth/2){
			v.layout(unitWidth*2, v.getTop(), unitWidth*2+pointWidth, v.getBottom());
			((TextView)strength_select_tvs.getChildAt(2)).setTextSize(18);
			typeStrength = 2;
		}else{
			v.layout(0, v.getTop(), pointWidth, v.getBottom());
			((TextView)strength_select_tvs.getChildAt(0)).setTextSize(18);
			typeStrength = 1;
		}
	}
}


触摸滑动实现直线选择


推荐阅读
  • 代码:在mysql5.6,运行正常,5.7报错SELECTsum((selecta.numwherea.status1))astotalFROMmes_order_productA ... [详细]
  • MyBatis模糊查询和多条件查询一、ISmbmsUserDao层根据姓名模糊查询publicListgetUser();多条件查询publicList ... [详细]
  • 【自制小工具】代码生成器
    【自制小工具】代码生成器陆陆续续接触过好几款代码生成工具,发现确实好用,但都会有那么点不完善的地方,所以索性就自己做一个吧。界面非常简单,反正是自己用的,简单点用起来也方便上图:左 ... [详细]
  • 例子如Table表有性别字段,1代表男2代表女、3代表中性、还有没填就代表未说明selectid,decode(sex,'1','男', ... [详细]
  • vscode里的html标签导航的一系列问题
    哈喽,我今天带来的经验是,vscode在18年10月更新后的1.29以后,编辑html文档时,会发现最上面有个类似于HTML标签导航的玩意儿,可能部分同学和我一样不习惯用它们,现在 ... [详细]
  • Illustrator绘制逼真的愤怒的小鸟实例教程
    Illustrator教程: ... [详细]
  • 抓取百万知乎用户设计之实体设计
    一.实体的关系实体是根据返回的Json数据来设计的教育经历方面用户可以有很多教育经理,USER和education是一对多的关系,一个education对应一个education一 ... [详细]
  • iOS之富文本
    之前做项目时遇到一个问题:使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结 ... [详细]
  • Xib九宫格应用管理使用xib封装一个自定义view的步骤1新建一个继承UIView的自定义view,假设类名叫做(AppView)2新建一个AppView.xib文件来描述 ... [详细]
  • kepserver中文手册,kepserver使用教程,kepserver设置
    下面介绍一下KepServer模拟器的使用,以下示例使用服务器随附的Simulator驱动程序来演示创建、配置和运行项目的过程。Simulator驱动程序是基于内存的驱动程序,能为 ... [详细]
  • 论文阅读及复现 | Improved Semantic Representations From TreeStructured Long ShortTerm Memory Networks
    两种形式的LSTM变体Child-SumTree-LSTMsN-aryTree-LSTMshttps:paperswithcode.compaperimproved-semanti ... [详细]
  • 看这里,教你如何快速将pdf文件翻译成中文
    因为网上下载的PDF资料,往往掺杂着一些英文,所以中英文翻译是一件很平常的事,毕竟不是每个人的英文都那么好,轻轻松松的就能够看完一篇英文的文件,那么,我们就要寻找翻译工具来帮助我们 ... [详细]
  • 以SOA服务为导向的信息系统构建是通过有计划地构建信息系统时,一种简单而有柔性的方法,就是组件化与服务导向架构。过去的信息系统,是在使用者需要新功能时才开发的,也就是响应不同时 ... [详细]
  • 简单动态字符串redis里面很多地方都用到了字符串,我们知道redis是一个键值对存储的非关系型数据库,那么所有的key都是用字符串存储的,还有字符串类型,这些都是用字符串存储的 ... [详细]
  • 接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后有针对 ... [详细]
author-avatar
ym_泳梅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有