欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android屏幕随机位置弹出View

程序员文章站 2022-05-23 16:25:02
...

最近项目中人脸注册需要尽量多的捕捉人脸特征,就要想办法使得人脸在注册中呈现不同角度,于是想到在屏幕内随机位置弹出一个吸引注意力的View。
本文中主要用到:
1.view.setX();setY()方法。
2.帧动画简单使用
3.addView前记得removeView();

package com.interjoy.testdemo;

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;

import java.util.Random;

public class SparkActivity extends Activity {
    private FrameLayout frameLayout;//烟花的父控件
    private int screenWidth, screenHeight;//屏幕的宽度,高度
    private ImageView imageView;//显示烟花动画

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_spark);
        initViews();
    }

    private void initViews() {
        //获取屏幕宽高
        WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics outMetrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(outMetrics);
        screenWidth = outMetrics.widthPixels;
        screenHeight = outMetrics.heightPixels;
        frameLayout = (FrameLayout) findViewById(R.id.fl_spark);
        imageView = new ImageView(this);
        //点击事件弹出动画
        findViewById(R.id.btn_popup).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                frameLayout.removeAllViews();//避免重复添加某控件,所以要移除
                loadAnim2();
            }
        });
    }

    private void loadAnim2() {
        //动画控件的宽高
        int viewWidth = 255;
        int viewHeight = 255;
        //随机生成一个屏内的位置来显示动画
        int x = getRandomInt(screenWidth - viewWidth);
        int y = getRandomInt(screenHeight - viewHeight);
        imageView.setX(x);
        imageView.setY(y);
        //设置动画的宽和高
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(viewWidth, viewHeight);
        frameLayout.addView(imageView, lp);
        AnimationDrawable anim = new AnimationDrawable();
        for (int i = 1; i < 22; i++) {//资源文件res/drawable中有图片bomb1~bomb21
            int id = getResources().getIdentifier("bomb" + i, "drawable", getPackageName());
            Drawable drawable = getResources().getDrawable(id);
            anim.addFrame(drawable, 100);
        }
        anim.setOneShot(false);
        imageView.setImageDrawable(anim);
        anim.start();
    }


    //生成随机数 范围 [0,max)
    private int getRandomInt(int max) {
        Random random = new Random();
        return random.nextInt(max);
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.interjoy.testdemo.SparkActivity">

    <FrameLayout
        android:id="@+id/fl_spark"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <Button
        android:id="@+id/btn_popup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|center_horizontal"
        android:layout_marginBottom="40dp"
        android:text="随机弹烟花" />
</FrameLayout>

贴上一张效果图:
Android屏幕随机位置弹出View