项目中的UI开发中实现的功能(1)
2011-12-07 09:14
471 查看
最近项目中需要自定义一个上下滑动的开关,跟MIUI中的横向滑动开关一样,不过我的是上下滑动的,特此分享出来给大家。
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class SlipButton extends View implements OnTouchListener {
private boolean NowChoose = false;
public void setNowChoose(boolean nowChoose) {
NowChoose = nowChoose;
}
private boolean OnSlip = false;
private float DownY, NowY;
private Rect Btn_On, Btn_Off;
private boolean isChgLsnOn = false;
private OnChangedListener ChgLsn;
private Bitmap bg_on, bg_off, slip_btn;
public SlipButton(Context context) {
super(context);
init();
}
public SlipButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
try{
bg_on = BitmapFactory.decodeResource(getResources(),
R.drawable.bg_switch);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
try{
bg_off = BitmapFactory.decodeResource(getResources(),
R.drawable.bg_switch);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
try{
slip_btn = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_write);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
Btn_On = new Rect(0, 0, slip_btn.getWidth(), slip_btn.getHeight());
Btn_Off = new Rect(bg_off.getWidth() - slip_btn.getWidth(), 0,
bg_off.getWidth(), bg_off.getHeight());
setOnTouchListener(this);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Matrix matrix = new Matrix();
Paint paint = new Paint();
float y = 0;
if (NowY < (bg_on.getHeight() / 2)){
try{
slip_btn = BitmapFactory.decodeResource(getResources(), R.drawable.ic_write);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
canvas.drawBitmap(bg_off, matrix, paint);
}
else{
try{
slip_btn = BitmapFactory.decodeResource(getResources(), R.drawable.ic_mic);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
canvas.drawBitmap(bg_on, matrix, paint);
}
if (OnSlip)
{
if (NowY >= bg_on.getHeight())
y = bg_on.getHeight() - slip_btn.getHeight() / 2;
else
y = NowY - slip_btn.getHeight() / 2;
} else {
if (NowChoose) {
y = Btn_Off.bottom;
try{
slip_btn = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_mic);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
} else {
y = Btn_On.top;
try{
slip_btn = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_write);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
}
}
if (y < 0)
y = 0;
else if (y > bg_on.getHeight() - slip_btn.getHeight())
y = bg_on.getHeight() - slip_btn.getHeight();
canvas.drawBitmap(slip_btn, 0, y, paint);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_MOVE:
NowY = event.getY();
break;
case MotionEvent.ACTION_DOWN:
if (event.getY() > bg_on.getHeight()
|| event.getX() > bg_on.getWidth())
return false;
OnSlip = true;
DownY = event.getY();
NowY = DownY;
break;
case MotionEvent.ACTION_UP:
OnSlip = false;
boolean LastChoose = NowChoose;
if (LastChoose) {
NowChoose = false;
ChgLsn.OnChanged(NowChoose);
} else {
NowChoose = true;
ChgLsn.OnChanged(NowChoose);
}
break;
default:
}
invalidate();
return true;
}
public void SetOnChangedListener(OnChangedListener l) {
isChgLsnOn = true;
ChgLsn = l;
}
}
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class SlipButton extends View implements OnTouchListener {
private boolean NowChoose = false;
public void setNowChoose(boolean nowChoose) {
NowChoose = nowChoose;
}
private boolean OnSlip = false;
private float DownY, NowY;
private Rect Btn_On, Btn_Off;
private boolean isChgLsnOn = false;
private OnChangedListener ChgLsn;
private Bitmap bg_on, bg_off, slip_btn;
public SlipButton(Context context) {
super(context);
init();
}
public SlipButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
try{
bg_on = BitmapFactory.decodeResource(getResources(),
R.drawable.bg_switch);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
try{
bg_off = BitmapFactory.decodeResource(getResources(),
R.drawable.bg_switch);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
try{
slip_btn = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_write);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
Btn_On = new Rect(0, 0, slip_btn.getWidth(), slip_btn.getHeight());
Btn_Off = new Rect(bg_off.getWidth() - slip_btn.getWidth(), 0,
bg_off.getWidth(), bg_off.getHeight());
setOnTouchListener(this);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Matrix matrix = new Matrix();
Paint paint = new Paint();
float y = 0;
if (NowY < (bg_on.getHeight() / 2)){
try{
slip_btn = BitmapFactory.decodeResource(getResources(), R.drawable.ic_write);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
canvas.drawBitmap(bg_off, matrix, paint);
}
else{
try{
slip_btn = BitmapFactory.decodeResource(getResources(), R.drawable.ic_mic);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
canvas.drawBitmap(bg_on, matrix, paint);
}
if (OnSlip)
{
if (NowY >= bg_on.getHeight())
y = bg_on.getHeight() - slip_btn.getHeight() / 2;
else
y = NowY - slip_btn.getHeight() / 2;
} else {
if (NowChoose) {
y = Btn_Off.bottom;
try{
slip_btn = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_mic);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
} else {
y = Btn_On.top;
try{
slip_btn = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_write);
}catch (OutOfMemoryError e) {
e.printStackTrace();
}
}
}
if (y < 0)
y = 0;
else if (y > bg_on.getHeight() - slip_btn.getHeight())
y = bg_on.getHeight() - slip_btn.getHeight();
canvas.drawBitmap(slip_btn, 0, y, paint);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_MOVE:
NowY = event.getY();
break;
case MotionEvent.ACTION_DOWN:
if (event.getY() > bg_on.getHeight()
|| event.getX() > bg_on.getWidth())
return false;
OnSlip = true;
DownY = event.getY();
NowY = DownY;
break;
case MotionEvent.ACTION_UP:
OnSlip = false;
boolean LastChoose = NowChoose;
if (LastChoose) {
NowChoose = false;
ChgLsn.OnChanged(NowChoose);
} else {
NowChoose = true;
ChgLsn.OnChanged(NowChoose);
}
break;
default:
}
invalidate();
return true;
}
public void SetOnChangedListener(OnChangedListener l) {
isChgLsnOn = true;
ChgLsn = l;
}
}
相关文章推荐
- android项目开发之-动态任务分配功能的实现
- [置顶] Android移动开发-在Android项目里集成开源框架ZXing实现扫描二维码的功能
- 【Android 开发】:UI控件之 ImageView 实现图片旋转和缩放功能
- node.js---sails项目开发(6)--- 实现分页功能
- iOS开发项目实战——Swift实现ScrollView滚动栏功能
- iOS开发UI基础—30在UItableview中实现加载更多功能
- PHP开发的一个小小项目,记录下实现思路(附上实现功能的示例代码)(二)
- iOS开发项目实战——Swift实现ScrollView滚动条功能
- iOS项目开发小技巧 (三) --UITableView实现Cell左划删除等自定义功能
- PHP开发的一个小小项目,记录下实现思路(附上实现功能的示例代码)(一)
- Android项目开发(3)-注册验证码验证页面功能实现
- 使用ant实现svn管理得eclipse插件开发项目的日构建功能(ant1.7.1+svn1.6.3+eclipse3.4.2)
- QtQuick桌面应用开发指导 1)关于教程 2)原型和设计 3)实现UI和功能_A
- 笔记62 | 个人项目“易来”开发记录《一》实现号码测凶吉功能模块
- angular JS 基于ionic框架 开发移动端项目 实现进入前台 判断用户权限 控制项目UI布局和tab的部门显示和隐藏
- Android UI开发第十八篇——ActivityGroup实现tab功能
- Android开发,项目中实现的摇一摇功能。使用加速度传感器SensorEventListener
- 使用ant实现svn管理得eclipse插件开发项目的日构建功能(ant1.7.1+svn1.6.3+eclipse3.4.2)
- Android UI开发第十八篇——ActivityGroup实现tab功能
- Android项目开发(4)-忘记密码---验证码验证页面功能实现