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>
贴上一张效果图:
上一篇: MacOS搭建深度学习环境遇到的坑
推荐阅读
-
Android编程实现popupwindow弹出后屏幕背景变成半透明效果
-
Android Animation实战之屏幕底部弹出PopupWindow
-
基于Android实现点击某个按钮让菜单选项从按钮周围指定位置弹出
-
Android 自定义可拖拽View界面渲染刷新后不会自动回到起始位置
-
基于Android实现点击某个按钮让菜单选项从按钮周围指定位置弹出
-
Android开发实现popupWindow弹出窗口自定义布局与位置控制方法
-
Android自定义View绘制四位数随机码
-
Android屏幕及view的截图实例详解
-
详解Android PopupWindow怎么合理控制弹出位置(showAtLocation)
-
Android 将 android view 的位置设为右下角的解决方法