android滑动动画效果,Android 滑块上下移动的实现(加速动画效果)

1、MainActivity

package com.xpg.slider;

import com.xpg.view.SliderView;

import com.xpg.view.SliderView.SliderListener;

import android.os.Bundle;

import android.app.Activity;

import android.widget.RelativeLayout;

import android.widget.RelativeLayout.LayoutParams;

public class MainActivity extends Activity implements SliderListener{

private RelativeLayout relativeLayout ;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//初始化SliderView

relativeLayout = (RelativeLayout)findViewById(R.id.slider);

SliderView sliderView = new SliderView(this,this);

RelativeLayout.LayoutParams sliderLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

sliderLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

sliderView.setLayoutParams(sliderLayoutParams);

relativeLayout.addView(sliderView);

sliderView.setSilderListener(this);

}

@Override

public void sliderIsUp() {

// TODO Auto-generated method stub

System.out.println("实现接口!!!");

}

@Override

public void sliderIsDown() {

// TODO Auto-generated method stub

System.out.println("返回原点!!!");

}

}

2、SliderView

package com.xpg.view;

import com.xpg.slider.R;

import android.R.integer;

import android.app.Activity;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.os.Handler;

import android.os.Message;

import android.util.AttributeSet;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

public class SliderView extends View {

private Context context;

private Bitmap slipopenBtn, slipopenBg;

private float y, x, drawY,progress;//progress

public SliderListener silderListener ;

private int height,bottomMargin;//加入leftMargin变量是为了让滑块 离两边有个距离

private Handler myHandler = new Handler(){

@Override

public void handleMessage(Message msg) {

// TODO Auto-generated method stub

drawY = msg.arg1;

invalidate();

super.handleMessage(msg);

}

@Override

public void dispatchMessage(Message msg) {

// TODO Auto-generated method stub

super.dispatchMessage(msg);

}

};

public SliderView(Context context) {

super(context);

this.context = context;

init();

}

public SliderView(Context context , SliderListener openlocklistener) {

super(context);

this.context = context;

this.silderListener = openlocklistener;

init();

}

public SliderView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

this.context = context;

init();

}

public SliderView(Context context, AttributeSet attrs) {

super(context, attrs);

this.context = context;

init();

}

private void init() {

slipopenBtn = BitmapFactory.decodeResource(getResources(),

R.drawable.hbs_home_open_tab_bg2);

slipopenBg = BitmapFactory.decodeResource(getResources(),

R.drawable.hbs_home_open_tab_bg);

height = ((Activity)context).getWindowManager().getDefaultDisplay().getHeight();

//bottomMargin = Math.round(37f/480f*height);//????

bottomMargin = slipopenBg.getHeight()/2-slipopenBtn.getHeight();

drawY = slipopenBg.getHeight()/2 -bottomMargin;//初始化drawY的初始值

progress = slipopenBg.getHeight()/2 -bottomMargin;//初始化progress的值

}

@Override

protected void onDraw(Canvas canvas) {

Paint paint = new Paint();

canvas.drawBitmap(slipopenBg, 0, 0, paint);

//canvas.drawBitmap(slipopenBtn, drawY, slipopenBg.getHeight() / 2

//- slipopenBtn.getHeight() / 2, paint);

canvas.drawBitmap(slipopenBtn, 0, drawY , paint);

super.onDraw(canvas);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

int i = 0xff & event.getAction();

switch (i) {

case 0: //

break;

case 5: //

break;

case 2: // 按住

this.y = event.getY();

this.x = event.getX();

// 按住的限制条件

if (x <= slipopenBg.getWidth()) {

if ((y <= slipopenBg.getHeight() - slipopenBtn.getHeight() / 2)

&& (drawY >= bottomMargin + bottomMargin / 2)

&& (y >= bottomMargin + slipopenBtn.getHeight() / 4)) {

drawY = y - slipopenBtn.getHeight() / 2;

}

break;

}

case 1: // 松开

if (drawY <= bottomMargin + bottomMargin/2) {

drop();

silderListener.sliderIsUp();

}

if (drawY > bottomMargin + bottomMargin / 2) {

drawY = slipopenBg.getHeight() / 2 - bottomMargin; // 没开锁,滑块重新回到初始位置

}

break;

case 6:

break;

default:

break;

}

invalidate();

return true;

}

/**

* 启动线程

*/

private void drop(){

new Thread(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

motion();

}

}).start();

}

/**

* 设置动作效果

*/

private void motion(){

for (int i = 0; i

if (i==0) {//停留一段时间

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}else if (i <= 70) {//这段时间缓慢下落

try {

drawY = drawY + 3;

Message msg = new Message();

msg.what = 1;

msg.arg1 = (int) drawY;

myHandler.sendMessage(msg);

Thread.sleep(12);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} else if(i > 70 && i < 140){//这段时间加速

try {

drawY = drawY + 3;

Message msg = new Message();

msg.what = 1;

msg.arg1 = (int) drawY;

myHandler.sendMessage(msg);

Thread.sleep(3);

if (drawY > 175) {//这段时间加加速

drawY = slipopenBg.getHeight()/2 -bottomMargin; //没开锁 ,滑块重新回到初始位置

}

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

drawY = slipopenBg.getHeight()/2 -bottomMargin;

silderListener.sliderIsDown();

}

public SliderListener getSilderListener() {

return silderListener;

}

public void setSilderListener(SliderListener silderListener) {

this.silderListener = silderListener;

}

/**

* 空接口

*/

public interface SliderListener{

public void sliderIsUp();//达到最高点时触发

public void sliderIsDown();//返回原点时触发

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值