如果模拟一种图标被删除时一种颜色渐变的效果,采用TransitionDrawable实现
2014-08-15 12:27
513 查看
效果图:
![](http://img.blog.csdn.net/20140815121911875)
TransitionDrawable 可以用来实现两个Drawable直接的交错渐变的过渡效果
接着上篇,我们这样来实现:
activity:
代码:http://download.csdn.net/detail/baidu_nod/7759965
TransitionDrawable 可以用来实现两个Drawable直接的交错渐变的过渡效果
接着上篇,我们这样来实现:
public class MyDragLayer extends FrameLayout { /** * The bitmap that is currently being dragged */ private Bitmap mDragBitmap = null; private float mLastMotionX; private float mLastMotionY; private float mOffsetX; private float mOffsetY; private static final int TRANSITION_DURATION = 250; public View mTrashBin; public View mDropTarget; private final Paint mTrashPaint = new Paint(); private Paint mDragPaint; private TransitionDrawable mTransition; public MyDragLayer(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyDragLayer(Context context, AttributeSet attrs) { super(context, attrs); } public MyDragLayer(Context context) { super(context); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { mLastMotionX = ev.getX(); mLastMotionY = ev.getY(); int dx = 0; int dy = 0; if (mDragBitmap != null) { dx = (int)(mLastMotionX - mOffsetX + mDragBitmap.getWidth() / 2); dy = (int)(mLastMotionY - mOffsetY + mDragBitmap.getHeight() / 2); } int action = ev.getAction(); if (action == MotionEvent.ACTION_MOVE) { //如果之前进入trash view的范围,则mDropTarget必须是trashbin boolean preIsTrash = mDropTarget == mTrashBin; mDropTarget = findDropTarget(dx, dy); boolean currentIsTrash = mDropTarget == mTrashBin; if (!preIsTrash && currentIsTrash) { // 由外进入垃圾箱 mTransition.reverseTransition(TRANSITION_DURATION); } else if (preIsTrash && !currentIsTrash) { // 有垃圾箱往外 mTransition.reverseTransition(TRANSITION_DURATION); } if (currentIsTrash) { mDragPaint = mTrashPaint; } else { mDragPaint = null; } } else if (action == MotionEvent.ACTION_UP) { mDropTarget = findDropTarget(dx, dy); if (mDropTarget == mTrashBin) { invalidate(); return true; //QuickNavGridView will receive Action_cancel } } invalidate(); boolean result = super.onInterceptTouchEvent(ev); return result; } private View findDropTarget(int x, int y) { if (mTrashBin != null && mTrashBin.getVisibility() == View.VISIBLE) { Rect r = new Rect(); //将mTrashBin的坐标映射到Rect r上 mTrashBin.getHitRect(r); if (r.contains(x, y)) { return mTrashBin; } } return null; } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); if (mDragBitmap != null && !mDragBitmap.isRecycled()) { // Draw actual icon being dragged canvas.drawBitmap(mDragBitmap, getScrollX() + mLastMotionX - mOffsetX, getScrollY() + mLastMotionY - mOffsetY, mDragPaint); } } public void startDrag(Bitmap bitmap, int offsetx, int offsety) { mDragBitmap = bitmap; mOffsetX = offsetx; mOffsetY = offsety; mDragPaint = null; invalidate(); } public void setTrashBin(View view) { mTrashBin = view; mTransition = (TransitionDrawable) view.getBackground(); } }
activity:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test); MyLinearlayout layout = (MyLinearlayout)findViewById(R.id.linear); layout.mDragLayer = (MyDragLayer) findViewById(R.id.rootView); layout.mDragLayer.setTrashBin(findViewById(R.id.trashbin)); }
代码:http://download.csdn.net/detail/baidu_nod/7759965
相关文章推荐
- 使用TtransitionDrawable来实现图片颜色渐变过渡或者实现button的背景颜色渐变,很漂亮的效果
- 使用TransitionDrawable实现渐变效果
- 使用TransitionDrawable实现渐变效果
- 如何使用TransitionDrawable实现背景切换渐变效果
- CAGradientLayer 实现颜色渐变效果简介
- CSS实现网页背景颜色渐变的效果(火狐浏览器,IE,)
- 实现背景颜色的渐变效果
- CSS滤镜实现的颜色渐变翻转效果
- CSS实现网页背景颜色渐变的效果。
- Javascript 颜色渐变效果的实现代码
- 用CSS实现表格背景颜色渐变效果
- Javascript 颜色渐变效果的实现代码
- css实现背景颜色渐变效果
- 浏览器实现颜色渐变效果(兼容)
- 使用TransitionDrawable实现两张图片的过渡效果
- 纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
- 用CSS滤镜实现颜色渐变效果
- 利用GradientFill函数实现颜色渐变效果
- 实现背景颜色的渐变效果(code project)
- 一种表格背景色渐变效果的实现