触摸滑动实现直线选择

先看效果图:

源代码:

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;
		}
	}
}
时间: 2024-11-23 09:38:31

触摸滑动实现直线选择的相关文章

移动端触摸滑动插件Swiper

移动端触摸滑动插件Swiper 04/02/2015 一.了解Swiper 目前移动端项目一般都需要具有触屏焦点图的效果,如果你也需要实现这一功能的话,Swiper是一个不错的选择. 1.他不需要加载任何公共库(如jQuery)即可运行,这保证了Swiper的轻量和运行速度.Swiper也可以在加载了公共库的环境下安全的动行,如jQuery,Zepto,jQuery Moblie等. 2.Swiper默认的触摸比例为1:1,你可以通过修改Swiper的设置来改变这个比例. 3.Swiper 增加

移动端网站的内容触摸滑动-Swiper插件

手机平板等大多移动端站点都会有触摸滑动内容的功能,公司移动端站点(m.muzhiwan.com)的标题广告滑动以及轮播效果就是用的Swiper插件. Swiper就是常用于移动端网站的内容触摸滑动的一个js插件. Swiper是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端,以及PC端网站. Swiper能实现触屏焦点图.触屏Tab切换.触屏多图切换等常用效果. Swiper开源.免费.稳定.使用简单.功能强大,是架构移动终端网站的重要选择! 使用详情,参见Swiper中

UI--单行文本水平触摸滑动效果

<代码里的世界> -UI篇 用文字札记描绘自己 android学习之路 转载请保留出处 by Qiao http://blog.csdn.net/qiaoidea/article/details/45115047 [导航] - 单行文本水平触摸滑动效果 通过EditText实现TextView单行长文本水平滑动效果 - 多行文本折叠展开 自定义布局View实现多行文本折叠和展开 1.初衷 最近做应用的时候有用到TextView单行长文本,当文本内容过长时候又想实现触摸水平滑动效果.网上找了很多

基于zepto的插件之移动端无缝向上滚动并上下触摸滑动

该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 公司的移动端项目是基于zepto的,有一个页面要求文字能够无缝地不停向上滚动,但查了网上的资料,大多都是基于jquery的,虽然稍作修改就可以用于移动端,但不能实现触摸上下翻滚.所以就去了zepto的官网查看其API,却发现如果要使用zepto的swipe()方法,需要引用其已经封装好的touch.js文件,我就赶紧引用了这个js文件,可在实际测试中,官网给出的touch.js文件

简易实现 TextView单行文本水平触摸滑动效果

为了方便查看,已使用markdown编辑形成新博文. 本文Mardown地址 近期做应用的时候实用到TextView单行长文本,当文本内容过长时候又想实现触摸水平滑动效果. 网上找了非常多,都没有看到有效解决方式. 当中,最常见的也是最笨拙滴採用重写TextView并继承实现touch 和 Gesture手势. 后来经提醒发现了事实上最简单的方案: 直接使用 EditText 就好了. 由于edittext须要编辑和移动光标的缘故.使得它是能够水平滑动的.因此我们仅仅须要设置其为透明背景,而且不

swipe JS – 移动WEB页面内容触摸滑动类库

swipe.js文档及用法 今天带来一个轻量级js触摸滑动类库-swipe JS,这是一个非常小的一个javascript类库,但他的功能却不简单,它可以用来展示web页面上的任何内容,支持精确的触摸移动操作,而且还可以设置自动播放.等比例缩放等等实用性的功能: 一.用法 Swipe只需添加很简单的一段代码即可,如下 <div id='slider' class='swipe'> <div class='swipe-wrap'> <div class='wrap'>&l

web移动端触摸滑动事件

web移动端触摸事件的范例~~~ 注意:1.如果不是内联元素,获取style的属性值前需先赋值~不然为Null. 2.亲测andriod 手机 MX4内置浏览器运行妥妥的~~但是微信浏览器并不支持~原因未找到. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;">

移动端网站的内容触摸滑动

对项目的说明: 前一段时间移动端网站中要求实现一个“内容触摸滑动”的功能,需求如下: 1. 通过点击小图显示大图: 2. 再次点击大图回到原来的小图: 3. 图片能够滑动切换: 4. 显示当前图片的索引(目前我正在浏览哪一张图片). 自己写了一些功能,完成了第 1.2 的需求,但是由于 js 基础较差,就借用了 swiper 这个插件来完成了剩余的两个需求. swiper常用于移动端网站的内容触摸滑动.swiper能实现触屏焦点图.触屏Tab切换.触屏多图切换等常用效果.swiper 中文网官方

手机网站的触摸滑动事件

关于触摸滑动的网上有比较多的插件,我找了一个比较好用的插件,给大家分享下. http://stephband.info/jquery.event.swipe/ 通过引入两个文件就可以在手机web页面上实现触摸滑动操作了(文件在github里面,jquery.event.move.js和jQuery.event.swipe.js) 用法: var slides = jQuery('.slides'), i = 0; slides .on('swipeleft', function(e) { sli