模仿去哪儿的磁贴效果

感觉去哪儿的页面做的非常不错,非常好看,于是想模仿一下,其实实现还是很简单的,就是按下去的执行缩小动画,抬起的恢复正常状态,这种效果叫磁贴效果,顾名思义感觉就磁贴一样。下面我们来看看效果图:

下面我们来看看最重要的自定义代码:

package com.zqy.qunertext;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.widget.FrameLayout;

/**
 *
 *
 * @author zqy
 *
 */
public class HomeMenuButton extends FrameLayout {
	private boolean isPressed;
	private ScaleAnimation zoomInAnimation;
	private ScaleAnimation zoomOutAnimation;

	public HomeMenuButton(Context context) {
		this(context,null);
	}

	public HomeMenuButton(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}

	private void init() {
		/**
		 * 初始化动画
		 */
		zoomInAnimation = new ScaleAnimation(1f, 0.95f, 1f, 0.95f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
		zoomInAnimation.setFillAfter(true);
		zoomInAnimation.setDuration(200);
		zoomOutAnimation = new ScaleAnimation(0.95f, 1f, 0.95f, 1f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
		zoomOutAnimation.setFillAfter(true);
		zoomOutAnimation.setDuration(200);

	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
	}

	private void toNormalState() {
		isPressed = false;
		invalidate();
		startAnimation(zoomOutAnimation);
	}

	private boolean pointInView(float localX, float localY, float slop) {
		return localX >= -slop && localY >= -slop && localX < getWidth() + slop
				&& localY < getHeight() + slop;
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			isPressed = true;//设置true
			invalidate();//重绘
			this.startAnimation(zoomInAnimation);//执行动画
			break;
		case MotionEvent.ACTION_UP:
			boolean needPerformClick = isPressed;
			toNormalState();//正常
			if (needPerformClick) {
				performClick();
			}
			break;

		case MotionEvent.ACTION_MOVE:
			final int x = (int) event.getX();
			final int y = (int) event.getY();
			if (!pointInView(x, y, 20)) {
				toNormalState();
			}
			break;

		case MotionEvent.ACTION_CANCEL:
		case MotionEvent.ACTION_OUTSIDE:
			toNormalState();
			break;
		}

		return true;

	}
}

上面代码晚上几乎就已经完成了:只有把自定义的代码写在XML里面就可以了:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:baselineAligned="false"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginTop="8dp"
            android:layout_weight="1"
            android:orientation="vertical" >

            <com.zqy.qunertext.HomeMenuButton
                android:id="@+id/hb_ad"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="2"
                android:background="@drawable/icon_favoable" >
            </com.zqy.qunertext.HomeMenuButton>

            <com.zqy.qunertext.HomeMenuButton
                android:id="@+id/hb_order"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginTop="8dp"
                android:layout_weight="2"
                android:background="@drawable/icon_order" >
            </com.zqy.qunertext.HomeMenuButton>

            <com.zqy.qunertext.HomeMenuButton
                android:id="@+id/hb_cloud_manger"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginTop="8dp"
                android:layout_weight="1"
                android:background="@drawable/icon_favorable_manger" >
            </com.zqy.qunertext.HomeMenuButton>

            <com.zqy.qunertext.HomeMenuButton
                android:id="@+id/hb_setting"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginTop="8dp"
                android:layout_weight="1"
                android:background="@drawable/icon_setting" >
            </com.zqy.qunertext.HomeMenuButton>
        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginTop="8dp"
            android:layout_weight="1"
            android:orientation="vertical" >

            <com.zqy.qunertext.HomeMenuButton
                android:id="@+id/hb_goods_manager"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:background="@drawable/icon_goods" >
            </com.zqy.qunertext.HomeMenuButton>

            <com.zqy.qunertext.HomeMenuButton
                android:id="@+id/hb_store_net"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginTop="8dp"
                android:layout_weight="2"
                android:background="@drawable/icon_store" >
            </com.zqy.qunertext.HomeMenuButton>

            <com.zqy.qunertext.HomeMenuButton
                android:id="@+id/hb_incoming"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginTop="8dp"
                android:layout_weight="2"
                android:background="@drawable/icon_money" >
            </com.zqy.qunertext.HomeMenuButton>

            <com.zqy.qunertext.HomeMenuButton
                android:id="@+id/hb_employee_manager"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginTop="8dp"
                android:layout_weight="1"
                android:background="@drawable/icon_manage" >
            </com.zqy.qunertext.HomeMenuButton>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

OK.大功告成。效果还可以:呵呵

下载地址:

时间: 2024-10-10 15:05:54

模仿去哪儿的磁贴效果的相关文章

模仿京东顶部搜索条效果制作的一个小demo

最近模仿京东顶部搜索条效果制作的一个小demo,特贴到这里,今后如果有用到可以参考一下,代码如下 1 #define kScreenWidth [UIScreen mainScreen].bounds.size.width 2 #define kScreenHeight [UIScreen mainScreen].bounds.size.height 3 4 #import "mainViewController.h" 5 6 @interface mainViewController

jQuery模仿window7窗口弹出效果

原文:jQuery模仿window7窗口弹出效果 源代码下载地址:http://www.zuidaima.com/share/1595935788665856.htm 效果不错,分享下. 出处:http://www.jq-show.com/Detail.aspx?id=197 版权声明:本文为博主原创文章,未经博主允许不得转载.

模仿聊天窗口的分组的效果(粗糙的Demo)

#import "AViewController.h" #define max 8888888888 @interface AViewController ()<UITableViewDelegate,UITableViewDataSource> @property (nonatomic,strong)UITableView *myTabView; @property (nonatomic,strong)NSArray *dataArray; @property (nona

WP_3种磁贴效果设置

private void ApplicationBarIconButton_Click_1(object sender, EventArgs e) { var tileData = new FlipTileData() { //前面数据 Title = item.Name, BackgroundImage = new Uri(item.Images[0], UriKind.Relative), //后面数据 BackTitle = item.Name, BackContent = item.De

一个模仿探探头像编辑效果解析

此前一直在做模仿一个探探头像编辑的效果,但是水平不够一直没做出来,最后看到了丶亲一口就跑的源码 (http://www.apkbus.com/forum.php?mod=viewthread&tid=255164&highlight=%E6%8E%A2%E6%8E%A2 ),恍然醒悟,对我的一些知识有全面提升.我觉得最主要的这个 AnimatorSet 不了解,当时一直在思考如何将多个动画同时执行在我的知识里就一个AnimationSet这个动画集合,但是做不到同时播放.因此没有做出这个效

Android弹幕功能实现,模仿斗鱼直播的弹幕效果

转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/51933728 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新. 大家好,感觉好像已经很久没更新博客了.前段时间主要是忙于新书的事情,时间比较紧张.而现在新书已经完稿,剩下的事情就都是出版社的工作了,那么我又可以抽出时间来写写博客了. 记得之前有位朋友在我的公众号里问过我,像直播的那种弹幕功能该如何实现?如今直播行业确实是非常火爆

magiczoom 插件去版本(放大镜效果)

在放大镜效果中代码中有 Please upgrade to full version of Magic Zoom Plus™ 去除办法: 在 magiczoom 去版本 magiczoomplus.js 中,将 return String.fromCharCode(14 ^ u.charCodeAt(0)); 改成 return "";

模仿京东楼层跳转效果,附注释

<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript" src="js/jquery-3.1.1.min.js" ></script> <style type="text/css"&

android PopupWindow嵌套ListView(模仿分类下拉菜单效果)

先看下UI效果 这就是使用PopupWindow嵌套ListView实现的,这个简单,不做多介绍直接上代码 1:布局文件 <span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" and