设为首页 加入收藏

TOP

Andrid自定义组件之垂直SeekBar以及播放帧动画
2014-11-24 13:02:33 来源: 作者: 【 】 浏览:0
Tags:Andrid 定义 组件 垂直 SeekBar 以及 播放 动画

1. 自定义组件


Android开发环境中已经自带了很多标准的组件,可以让我们轻松的设计出一个不错的界面,但有时候这些标准组件无法满足我们的个性化需求,这是就需要我们自己制作自定义组件。


我们这个程序中需要用户输入自己的身高和体重,我没有用EditText 让用户输入,而是让用户调节SeekBar 来输入数据。体重用水平SeekBar 调节,身高用垂直SeekBar 调节,一开始感觉很容易实现,可是正真开发时却发现一个头疼的问题:SeekBar 不能设置成垂直的。那就只有自己重写SeekBar了,找到Android自带SeekBar的源码,研究调试了几天,终于实现了垂直SeekBar,下面是我的代码,经测试可以直接使用,希望对大家有帮助:


public class myBar extends SeekBar //继承SeekBar


{


//重写onSizeChanged,因为从水平变成垂直,所以要交换Width和Height


protected void onSizeChanged(int w, int h, int oldw, int oldh)


{


super.onSizeChanged(h, w, oldw, oldh);


}


//重写onDraw,关键旋转,这里可以自定义在原来水平的基础上旋转角度


protected void onDraw(Canvas c)


{


// 旋转


c.rotate(-90);


//控制左右位置,要自己调试,如果SeekBar有偏差可以在这里调整


c.translate(-this.getHeight(), 0);


super.onDraw(c);


}


//重写trackTouchEvent,主要是对旋转后的坐标进行交换修正


private voidtrackTouchEvent(MotionEvent event)


{


final int height = getHeight();


int mPaddingBottom = this.getBottom();


int y = (int)event.getY();


float scale = 0;


float progress = 0;


if(y > height)//mPaddingBottom)


{


scale = 0.0f;


}


else if( y>0 )


{


scale = 1-(float)y / (float)height;


}


else


{


scale= 1.0f;


}


final int max = getMax();


progress = scale * max;


setProgress(Math.round(progress));


setThumbPos(getHeight(), mThumb, scale, 0) ;


}


}


SeekBar 的重写 主要是旋转,还有对坐标的重新计算操作,具体的大家可以研究一下源码,实现自己的特殊功能。


下面就要把重写后的垂直SeekBar 部署到我们的界面里了,和其他标准组件一样,在layout的XML文件中键入下面语句:



android:id="@+id/billfatTestSlideBar1" android:thumb="@drawable/thumb2"


android:paddingTop="10dip"


android:layout_below="@+id/btn_ok" android:layout_alignLeft="@+id/btn_ok"android:layout_alignRight="@+id/btn_ok"


android:layout_width="30dip"


android:layout_height="fill_parent" >



具体设置按自己的需要,和正常SeekBar设置一样,要注意的就是需要把自己重写的SeekBar 的完整包路径名加上去com.bill.fatTest.myBar,下面是我的一个界面,左边那个垂直的SeekBar 即重写后的效果






】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android 解决listview中checkBox.. 下一篇Android 学生管理系统 之 SQLite..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python中文网 - 人生 (2025-12-24 18:49:47)
·【整整648集】这绝对 (2025-12-24 18:49:44)
·Python超详细一条龙 (2025-12-24 18:49:42)
·【超详细】JDK 下载 (2025-12-24 18:19:32)
·Java_百度百科 (2025-12-24 18:19:29)