日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android实现棱形效果

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android实现棱形效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看到仿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实现棱形效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。