您的位置:首页 > 产品设计 > UI/UE

项目中的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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐