看到仿Windows Phone的一个图片,感觉效果看起来不错,于是看能不能在Android中实现,因为我们一般看到的Android控件都是方形的,还是一个同学告诉我使用旋转可以实现,终于经过自己的努力,实现了,这里注意要用属性动画,Tween动画变换后只是显示的位置变了,但事件的点击位置没有变化,而属性动画就不一样,事件都一起跟着过去了。先看下效果:

其中的图片可以换成一个个应用的图片,点击相应的图片启动应用什么的都可以,看下代码:

主布局就一个FrameLayout

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/root"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@android:color/white" ></FrameLayout>

然后主要是Activity:

package com.iaiai.test;import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageButton;public class MainActivity extends Activity implements OnClickListener {private int mTitleBarHeight = 0;private int mScreenWidth = 0; // 屏幕宽度private int mScreenHeight = 0;// 屏幕高度private int mImageWidth = 120;// 图片宽度private int mImageHeigth = 120;// 图片高度private int mDiagonal = 0;// 对角线长度private int mXSpace = 4;private int mYSpace = 4;FrameLayout mRoot = null;ImageButton btn1;ImageButton btn2;ImageButton btn3;ImageButton btn4;ImageButton btn5;ImageButton btn6;ImageButton btn7;private int mLineOneCount = 4;private int mLineTwoCount = 3;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.activity_main);DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);mScreenWidth = dm.widthPixels;// 宽度 800mScreenHeight = dm.heightPixels;// 高度 450mDiagonal = (int) Math.sqrt(2 * mImageWidth * mImageWidth);mRoot = (FrameLayout) findViewById(R.id.root);btn1 = new ImageButton(this);// 中心点(mImageWidth/2,// mImageHeigth/2)AnimatorSet animSet = new AnimatorSet();/* 变换流程,先绕中心点旋转,在平移到圆心,在向左或者右移动以及上下移动 */btn1.setOnClickListener(this);btn1.setBackgroundColor(Color.TRANSPARENT);btn1.setImageResource(R.drawable.tab_buy_mask);LayoutParams params = new FrameLayout.LayoutParams(mImageWidth,mImageHeigth);mRoot.addView(btn1, params);ObjectAnimator anim1 = ObjectAnimator.ofFloat(btn1, "rotation", 0f, 45f);// anim1.start();ObjectAnimator anim2 = ObjectAnimator.ofFloat(btn1, "translationX", 0f,mScreenWidth / 2 - mImageWidth / 2 - 1.5f * mDiagonal - 1.5f* mXSpace);// anim2.start();ObjectAnimator anim3 = ObjectAnimator.ofFloat(btn1, "translationY", 0f,mScreenHeight / 2 - mImageHeigth / 2 - mDiagonal / 4 - 0.5f* mYSpace);// anim3.start();// animSet.setDuration(10);animSet.playTogether(anim1, anim2, anim3);animSet.start();btn2 = new ImageButton(this);btn2.setOnClickListener(this);btn2.setBackgroundColor(Color.TRANSPARENT);btn2.setImageResource(R.drawable.tab_buy_mask);mRoot.addView(btn2, params);anim1 = ObjectAnimator.ofFloat(btn2, "rotation", 0f, 45f);// anim1.start();anim2 = ObjectAnimator.ofFloat(btn2, "translationX", 0f, mScreenWidth/ 2 - mImageWidth / 2 - 0.5f * mDiagonal - 0.5f * mXSpace);// anim2.start();anim3 = ObjectAnimator.ofFloat(btn2, "translationY", 0f, mScreenHeight/ 2 - mImageHeigth / 2 - mDiagonal / 4 - 0.5f * mYSpace);// anim3.start();animSet.playTogether(anim1, anim2, anim3);animSet.start();btn3 = new ImageButton(this);btn3.setOnClickListener(this);btn3.setBackgroundColor(Color.TRANSPARENT);btn3.setImageResource(R.drawable.tab_buy_mask);mRoot.addView(btn3, params);anim1 = ObjectAnimator.ofFloat(btn3, "rotation", 0f, 45f);// anim1.start();anim2 = ObjectAnimator.ofFloat(btn3, "translationX", 0f, mScreenWidth/ 2 - mImageWidth / 2 + 0.5f * mDiagonal + 0.5f * mXSpace);// anim2.start();anim3 = ObjectAnimator.ofFloat(btn3, "translationY", 0f, mScreenHeight/ 2 - mImageHeigth / 2 - mDiagonal / 4 - 0.5f * mYSpace);// anim3.start();animSet.playTogether(anim1, anim2, anim3);animSet.start();btn4 = new ImageButton(this);btn4.setOnClickListener(this);btn4.setBackgroundColor(Color.TRANSPARENT);btn4.setImageResource(R.drawable.tab_buy_mask);mRoot.addView(btn4, params);anim1 = ObjectAnimator.ofFloat(btn4, "rotation", 0f, 45f);// anim1.start();anim2 = ObjectAnimator.ofFloat(btn4, "translationX", 0f, mScreenWidth/ 2 - mImageWidth / 2 + 1.5f * mDiagonal + 1.5f * mXSpace);// anim2.start();anim3 = ObjectAnimator.ofFloat(btn4, "translationY", 0f, mScreenHeight/ 2 - mImageHeigth / 2 - mDiagonal / 4 - 0.5f * mYSpace);// anim3.start();animSet.playTogether(anim1, anim2, anim3);animSet.start();btn5 = new ImageButton(this);btn5.setOnClickListener(this);btn5.setBackgroundColor(Color.TRANSPARENT);btn5.setImageResource(R.drawable.tab_music_mask);mRoot.addView(btn5, params);anim1 = ObjectAnimator.ofFloat(btn5, "rotation", 0f, 45f);// anim1.start();anim2 = ObjectAnimator.ofFloat(btn5, "translationX", 0f, mScreenWidth/ 2 - mImageWidth / 2 - mDiagonal - 1 * mXSpace);// anim2.start();anim3 = ObjectAnimator.ofFloat(btn5, "translationY", 0f, mScreenHeight/ 2 - mImageHeigth / 2 + mDiagonal / 4 + 0.5f * mYSpace);// anim3.start();animSet.playTogether(anim1, anim2, anim3);animSet.start();btn6 = new ImageButton(this);btn6.setOnClickListener(this);btn6.setBackgroundColor(Color.TRANSPARENT);btn6.setImageResource(R.drawable.tab_music_mask);mRoot.addView(btn6, params);anim1 = ObjectAnimator.ofFloat(btn6, "rotation", 0f, 45f);// anim1.start();anim2 = ObjectAnimator.ofFloat(btn6, "translationX", 0f, mScreenWidth/ 2 - mImageWidth / 2);// anim2.start();anim3 = ObjectAnimator.ofFloat(btn6, "translationY", 0f, mScreenHeight/ 2 - mImageHeigth / 2 + mDiagonal / 4 + 0.5f * mYSpace);// anim3.start();animSet.playTogether(anim1, anim2, anim3);animSet.start();btn7 = new ImageButton(this);btn7.setOnClickListener(this);btn7.setBackgroundColor(Color.TRANSPARENT);btn7.setImageResource(R.drawable.tab_music_mask);mRoot.addView(btn7, params);anim1 = ObjectAnimator.ofFloat(btn7, "rotation", 0f, 45f);// anim1.start();anim2 = ObjectAnimator.ofFloat(btn7, "translationX", 0f, mScreenWidth/ 2 - mImageWidth / 2 + mDiagonal + 1 * mXSpace);// anim2.start();anim3 = ObjectAnimator.ofFloat(btn7, "translationY", 0f, mScreenHeight/ 2 - mImageHeigth / 2 + mDiagonal / 4 + 0.5f * mYSpace);// anim3.start();animSet.playTogether(anim1, anim2, anim3);animSet.start();}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubint id = v.getId();}}

add一个Button都是添加到左上角,中心点在(mImageWidth/2,mImageHeigth/2),旋转45度后中心点没有变

变换的过程都是先移动到中心点,然后在根据需要向左右上下移动

android实现棱形效果相关推荐

  1. css常见效果——棱形图片

    难题 在视觉设计中,把图片裁切为棱形是一种常见的手段,这里我们需要实现一下效果 有些同学可能简单的认为,将container旋转45deg就ok了,但是你们想过没有,容器旋转了45deg,图片也会跟着 ...

  2. Unity3d Ugui图片上制作点光 、棱形光效果shader,并具有裁切

    Unity3d Ugui图片上制作点光 .棱形光效果 实现的效果可以参考如下图所示 通过shader来实现上述的效果,为了大家的适应性,推荐在unity官方的默认ui shader上更改,我用的是20 ...

  3. Android开发_android界面效果全汇总

    (一)Activity页面切换的效果 先介绍下左右滑动切换Activity,对于复杂的手势原理一样,具体后述. 主要原理为监控触屏事件和手势事件,在触屏事件处理函数中调用手势事件处理函数,表示用户触屏 ...

  4. android高仿小米时钟,Android小米时钟 Android仿小米时钟效果

    想了解Android仿小米时钟效果的相关内容吗,jane_dxj在本文为您仔细讲解Android小米时钟的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Android,时钟,下面大家一起来 ...

  5. css 实现带文字,阴影效果的棱形

    今天开发VUE项目,要实现一个UI效果.感觉效果挺好,记录一下.先看效果图 先说下实现思路刚看到这个布局的时候,感觉用个p 标签旋转45deg应该就能实现,但是旋转之后文字也跟着旋转了.这个问题不能够 ...

  6. c语言打印空心矩形图案的程序,C语言之输出空心棱形图案

    #include #include void main() { int n,j,i; /*i为行数,j为每行中的项数*/ printf("输入图案上三角的高度n:"); scanf ...

  7. Android横向伸缩,Android 实现伸缩布局效果示例代码

    最近项目实现下面的图示的效果,本来想用listview+gridview实现,但是貌似挺麻烦的于是就用flowlayout 来addview实现添加伸缩的效果,实现也比较简单. mainActivit ...

  8. Android实现左右滑动效果

    本示例演示在Android中实现图片左右滑动效果.   关于滑动效果,在Android中用得比较多,本示例实现的滑动效果是使用ViewFlipper来实现的,当然也可以使用其它的View来实现.接下来 ...

  9. Android 卡片翻转动画效果

    转载请标明出处:http://blog.csdn.net/android_mnbvcxz/article/details/78570594 Android 卡片翻转动画效果 前言 前端时间开发一款应用 ...

最新文章

  1. 综合应用题:投票程序(知识点:对象,数组,循环,流,工具类的应用)
  2. 在asp.net中控制回车键
  3. 【转】Dubbo_与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
  4. 最小生成树算法讨论(转)
  5. 纸质书,电子书,你会选择通过哪一种途径学习?
  6. Android小程序白屏,微信小程序web-view跳转h5 安卓白屏
  7. 计算机毕业论文数据挖掘,数据挖掘论文范文
  8. 使用深度森林(Deep Forest)进行分类-Python
  9. 运筹学及其matlab应用,运筹学基础及其MATLAB应用
  10. 代码 点胶gcode_3D打印☞Gcode代码详解(含详解PDF附件)
  11. 【硬石科技】电机系列教学(基于STM32)——PID算法实现闭环控制
  12. 年度最具特色生活类APP
  13. .net 导出excel_使用 EasyPOI 优雅导出Excel模板数据(含图片)
  14. java dispatcher详解_Java Web开发详解:RequestDispatcher接口
  15. 什么是新零售电商系统?
  16. NFA转DFA与DFA简化
  17. linux kfifo的使用
  18. 【新书推荐】Demystified Object-Oriented Programming with C++
  19. 【IDE】Eclipse中的workspace workingset 如何更好的搭配使用,以及本地项目文件夹的分类
  20. 备考计算机考研,如何备考计算机考研?

热门文章

  1. Python3 mp3音频转mav格式及ffmpeg安装
  2. 血栓清道夫机器人_这几种食物是血管“清道夫”,每天吃一点,清除血管垃圾,防血栓...
  3. 两分钟快速理解成本函数(cost function)
  4. 洛谷 P1569 [USACO11FEB]属牛的抗议Generic Cow Prote…
  5. Chrome插件实现GitHub代码离线翻译v0.0.4 2018-10-19
  6. win10宽带连接720错误 解决办法
  7. 如何在二维码下面显示对应数据
  8. Fluke DTX-CHA001/DTX-CHA001A/DTX-CHA002的区别
  9. php 解析md文件格式,Git中Read.MD文件格式:Markdown语言详解
  10. docker入门级详解