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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android仿支付宝UI功能开发,Android 自定义view仿支付宝咻一咻功能

發布時間:2024/7/19 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android仿支付宝UI功能开发,Android 自定义view仿支付宝咻一咻功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

支付寶上有一個咻一咻的功能,就是點擊圖片后四周有水波紋的這種效果,今天也寫一個類似的功能。

效果如下所示:

思路:

就是幾個圓的半徑不斷在變大,這個可以使用動畫縮放實現,還有透明動畫

還有就是這是好幾個圓,然后執行的動畫有個延遲效果,其實這些動畫是放在一起執行的,熟悉屬性動畫的知道已經給我們提供了同步執行動畫和順序執行動畫的實現api,也會會有人說這幾個view就是在onDraw()方法中畫幾個圓,可能會說我還要繼承容器view去onLayout()方法中這些子view添加在某個特定的區域,當然這也是可以的,其實簡單的就是以圖片為中心(圖片imageview在父view的中心),然后畫圓,指定每個字view的寬和高就行了,具體看代碼:

package com.zhifubaoxiuyixiu.view;

import android.animation.Animator;

import android.animation.AnimatorSet;

import android.animation.ObjectAnimator;

import android.content.Context;

import android.graphics.Color;

import android.graphics.Paint;

import android.util.AttributeSet;

import android.view.Gravity;

import android.view.View;

import android.view.animation.AccelerateDecelerateInterpolator;

import android.widget.FrameLayout;

import java.util.ArrayList;

/**

* Created by admin on 2016/12/29.

*/

public class ZhifubaoFrameLayout extends FrameLayout {

private int rippleColor = Color.parseColor("#0099CC");//水波紋的顏色

private int radius = 0;//水波紋圓的半徑

private long anim_duration = 3000;//動畫執行的時間

private int water_ripple_count = 6;

private int scale = 6;//動畫縮放比例

private long animDelay;//動畫延遲的時間

private Paint paint;

private AnimatorSet animatorSet;

private ArrayList animatorList;

private FrameLayout.LayoutParams rippleParams;

private ArrayList rippleViewList=new ArrayList();

private boolean isAnimRunning = false;

public ZhifubaoFrameLayout(Context context) {

this(context,null);

}

public ZhifubaoFrameLayout(Context context, AttributeSet attrs) {

this(context,attrs,0);

}

public ZhifubaoFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

initPaint();

addChildView();

initAnim();

}

/**

* 初始化動畫

*/

private void initAnim() {

animatorSet = new AnimatorSet();

animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());

animatorList=new ArrayList();

for(int i=0;i

final ObjectAnimator scaleXAnimator = ObjectAnimator.ofFloat(rippleViewList.get(i), "ScaleX", 1.0f, scale);

scaleXAnimator.setRepeatCount(ObjectAnimator.INFINITE);

scaleXAnimator.setRepeatMode(ObjectAnimator.RESTART);

scaleXAnimator.setStartDelay(i * animDelay);

scaleXAnimator.setDuration(anim_duration);

animatorList.add(scaleXAnimator);

final ObjectAnimator scaleYAnimator = ObjectAnimator.ofFloat(rippleViewList.get(i), "ScaleY", 1.0f, scale);

scaleYAnimator.setRepeatCount(ObjectAnimator.INFINITE);

scaleYAnimator.setRepeatMode(ObjectAnimator.RESTART);

scaleYAnimator.setStartDelay(i * animDelay);

scaleYAnimator.setDuration(anim_duration);

animatorList.add(scaleYAnimator);

final ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(rippleViewList.get(i), "Alpha", 1.0f, 0f);

alphaAnimator.setRepeatCount(ObjectAnimator.INFINITE);

alphaAnimator.setRepeatMode(ObjectAnimator.RESTART);

alphaAnimator.setStartDelay(i * animDelay);

alphaAnimator.setDuration(anim_duration);

animatorList.add(alphaAnimator);

}

animatorSet.playTogether(animatorList);

}

/**

* 添加水波紋子view

*/

private void addChildView() {

radius = 32;

animDelay=350;

rippleParams=new FrameLayout.LayoutParams((int)(2*(radius)),(int)(2*(radius)));

rippleParams.gravity = Gravity.CENTER;

for(int i=0;i

WateRipple rippleView=new WateRipple(getContext(),paint);

addView(rippleView,rippleParams);

rippleViewList.add(rippleView);

}

}

/**

* 初始化畫筆

*/

private void initPaint() {

paint = new Paint();

paint.setAntiAlias(true);

paint.setColor(rippleColor);

paint.setStyle(Paint.Style.FILL);

}

/**

* 開啟動畫

*/

public void startRippleAnimation(){

if(!isRunning()){

for(WateRipple wateRipple:rippleViewList){

wateRipple.setVisibility(VISIBLE);

}

animatorSet.start();

isAnimRunning=true;

}

}

/**

* 動畫停止運行

*/

public void stopAnimation(){

if(isRunning()){

animatorSet.cancel();

isAnimRunning=false;

}

}

/**

* 判斷是否動畫在運行

* @return

*/

public boolean isRunning(){

return isAnimRunning;

}

/**

* ui不可見時關閉動畫

* @param visibility

*/

@Override

protected void onWindowVisibilityChanged(int visibility) {

super.onWindowVisibilityChanged(visibility);

if(visibility==View.INVISIBLE||visibility ==View.GONE){

stopAnimation();

}

}

}

每個水波紋view

package com.zhifubaoxiuyixiu.view;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.view.View;

/**

* Created by admin on 2016/12/29.

*/

public class WateRipple extends View {

private Paint mPaint;

public WateRipple(Context context, Paint paint){

super(context);

if(paint==null){

this.mPaint = new Paint();

}else{

this.mPaint = paint;

}

setVisibility(View.INVISIBLE);//剛開始設置不可見

}

public WateRipple(Context context) {

super(context);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

int radius=(Math.min(getWidth(),getHeight()))/2;

canvas.drawCircle(radius,radius,radius,mPaint);

}

}

圓形圖片:

package com.zhifubaoxiuyixiu.view;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.BitmapShader;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.graphics.Shader;

import android.graphics.drawable.ShapeDrawable;

import android.graphics.drawable.shapes.OvalShape;

import android.util.AttributeSet;

import android.view.View;

import com.zhifubaoxiuyixiu.R;

/**

* Created by admin on 2016/12/29.

*/

public class CircleView extends View {

private BitmapShader bitmapShaderp ;

private ShapeDrawable shapeDrawable;

public CircleView(Context context) {

this(context,null);

}

public CircleView(Context context, AttributeSet attrs) {

this(context, attrs,0);

}

public CircleView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

initBitmap();

}

private void initBitmap() {

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.grid);

shapeDrawable = new ShapeDrawable(new OvalShape());

bitmapShaderp = new BitmapShader(bitmap, Shader.TileMode.CLAMP,Shader.TileMode.CLAMP);

shapeDrawable.getPaint().setShader(bitmapShaderp);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

shapeDrawable.setBounds(0,0,getWidth(),getHeight());

shapeDrawable.draw(canvas);

}

}

布局文件:

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/root"

>

android:layout_width="64dp"

android:layout_height="64dp"

android:layout_centerInParent="true"

android:id="@+id/imageView"

android:layout_gravity="center"

android:src="@mipmap/grid"/>

使用:

package com.zhifubaoxiuyixiu;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import com.zhifubaoxiuyixiu.view.CircleView;

import com.zhifubaoxiuyixiu.view.ZhifubaoFrameLayout;

public class MainActivity extends Activity {

private CircleView imageView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

imageView = (CircleView) findViewById(R.id.imageView);

final ZhifubaoFrameLayout root = (ZhifubaoFrameLayout) findViewById(R.id.root);

imageView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

root.startRippleAnimation();

}

});

}

}

以上所述是小編給大家介紹的Android 自定義view仿支付寶咻一咻功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

總結

以上是生活随笔為你收集整理的Android仿支付宝UI功能开发,Android 自定义view仿支付宝咻一咻功能的全部內容,希望文章能夠幫你解決所遇到的問題。

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