android 下拉阻尼 效果代码!!

在一个view中 下拉操作  view 上部分的 图像会被拉伸 (阻尼效果)参考了一下网上的代码 只要是重写 scollerview类 和运用 scoller类来实现  scoller类在处理滑动效果方面是非常的的强大 

下面附上 自定义的scollerview类 1


package com.example.testdrapscoller;


import android.content.Context;

import android.util.AttributeSet;

import android.view.KeyEvent;

import android.view.MotionEvent;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.ScrollView;

import android.widget.Scroller;


public class MyScrollerView extends ScrollView {

private static final int LEN = 0xc8;

private static final int DURATION = 500;

private static final int MAX_DY = 200;

private ImageView image;

private Scroller mScroller;

private float mStartx,mStarty,currentX,currentY;

private int top,left;

private int imageH;

private int imageW;

private boolean isScoller;

private TouchTool tool;

public MyScrollerView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

mScroller = new Scroller(context);

}

public void setImage(ImageView image){

this.image = image;

}

@Override

public void computeScroll() {

// TODO Auto-generated method stub

if(mScroller.computeScrollOffset()){

int x = mScroller.getCurrX();

int y = mScroller.getCurrY();

image.layout(0, 0, x+image.getWidth(), y);

invalidate();

if (!mScroller.isFinished() && isScoller && y > MAX_DY) {

ViewGroup.LayoutParams params = image

.getLayoutParams();

params.height = y;

image.setLayoutParams(params);

}

}

super.computeScroll();

}

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

// TODO Auto-generated method stub

int aciton = ev.getAction();

if(!mScroller.isFinished())

return true;

currentX = ev.getX();

currentY = ev.getY();

switch(aciton){

case MotionEvent.ACTION_DOWN:

mStartx = currentX;

mStarty = currentY;

left = image.getLeft();

top = image.getBottom();

imageH  = image.getHeight();

imageWimage.getWidth();

tool = new TouchTool(image.getLeft(), image.getBottom(), image.getLeft()+LEN, image.getBottom()+LEN);

break;

case MotionEvent.ACTION_MOVE:

if(tool!=null){

int t= tool.getScrollY(currentY-mStarty);

int w = tool.getScrollX(currentX-mStartx);

if(t>=top&&t<=image.getBottom()+LEN){

ViewGroup.LayoutParams param = image.getLayoutParams();

param.height = t;

image.setLayoutParams(param);

}

isScoller = false;

}

break;

case MotionEvent.ACTION_UP:

isScoller = true;

mScroller.startScroll(image.getLeft(), image.getBottom(), 0-image.getLeft(), imageH-image.getBottom(),DURATION);

invalidate();

break;

}

return true;

}

public class TouchTool {


private int startX, startY;


public TouchTool(int startX, int startY, int endX, int endY) {

super();

this.startX = startX;

this.startY = startY;

}


public int getScrollX(float dx) {

int xx = (int) (startX + dx / 2.5F);

return xx;

}


public int getScrollY(float dy) {

int yy = (int) (startY + dy / 2.5F);

return yy;

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值