当前位置: 首页 > news >正文

手机网站 程序信息流广告优化

手机网站 程序,信息流广告优化,响应式布局和弹性布局的区别,学网站维护一、引言 前几天#xff0c;我发布的日志《安卓应用开发学习#xff1a;查看手机传感器信息》记录了如何查看手机传感器的信息#xff0c;通过上述的方法#xff0c;可以看到我的OPPO手机支持19种传感器。本篇日志就记录一下常见的加速度传感器的典型应用——“摇一摇”功…一、引言 前几天我发布的日志《安卓应用开发学习查看手机传感器信息》记录了如何查看手机传感器的信息通过上述的方法可以看到我的OPPO手机支持19种传感器。本篇日志就记录一下常见的加速度传感器的典型应用——“摇一摇”功能。本应用通过加速度传感器来实现摇骰子或摇红包。最终效果如下 摇骰子 摇红包 游戏结束 二、功能实现 加速传感器是最常见的传感器之一有很多应用的摇手机功能就是用到了这个传感器。本次通过学习相关资料在我的手机上实现了摇骰子和摇红包两个小应用并且在摇动手机的过程中手机还会振动。大体的实现方法如下 1.实现振动功能 1.1先要在AndroidManifest.xml文件中添加如下权限。 uses-permission android:nameandroid.permission.VIBRATE / 1.2 在你创建的Activity中申明一个Vibrator对象。 private Vibrator mVibrator; 1.3在需要实现手机振动功能的代码块中执行vibrate()方法。 mVibrator.vibrate(300); // 系统检测到摇一摇事件后震动手机提示用户 该方法参数有两种形式 一是形如 mVibrator.vibrate(300)  的单参数表示让手机持续振动指定的毫秒数 二是形如 mVibrator.vibrate({500, 200, 500}, -1) 的双参数表示先振动500毫秒然后停止200毫秒再振动500毫秒。第二个参数为-1表示无循环为正数表示循环次数。 2.摇一摇功能的实现 2.1在你创建的Activity中申明一个SensorManager对象。 private SensorManager mSensorMgr; 2.2重写活动页面的onResume方法在该方法中注册传感器监听事件并指定待监听的传感器类型为加速度传感器。 Overrideprotected void onResume() {super.onResume();// 给加速度传感器注册传感监听器mSensorMgr.registerListener(this,mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);} 2.3重写活动页面的onPause方法在该方法中注销监听器。 Overrideprotected void onPause() {super.onPause();mSensorMgr.unregisterListener(this); // 注销当前活动的传感监听器} 2.3编写一个传感器事件监听器该监听器继承自SensorEventListener。 在活动页面名称后面添加“implements SensorEventListener”如下 public class ShakeActivity extends AppCompatActivity implements SensorEventListener {...} 然后按Alt EnterAndroid Studio 自动添加onSensorChanged方法和onAccuracyChanged方法。 onSensorChanged方法在感应信息变化时触发业务逻辑就写在这里。在本应用中添加的代码是检测手机晃动的幅度是否大于阀值一旦大于阀值就让手机振动500毫秒。 onAccuracyChanged方法在精度改变时触发一般无需处理。 Overridepublic void onSensorChanged(SensorEvent event) {if (event.sensor.getType() Sensor.TYPE_ACCELEROMETER) { // 加速度变更事件// values[0]:X轴values[1]Y轴values[2]Z轴float[] values event.values;if ((Math.abs(values[0]) 15 || Math.abs(values[1]) 15|| Math.abs(values[2]) 15)) {mVibrator.vibrate(300); // 系统检测到摇一摇事件后震动手机提示用户}}}Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// 当传感器精度改变时回调该方法一般无需处理} 3.游戏模式的选择 3.1本应用支持2种游戏模式因此在界面设计上用到了RadioGroup和RadioButton。 TextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenter_verticalandroid:gravitycenter_horizontalandroid:text游戏模式 /RadioGroupandroid:idid/rg_modeandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationhorizontalRadioButtonandroid:idid/rb_diceandroid:layout_width80dpandroid:layout_height20dpandroid:checkedtrueandroid:text摇骰子 /RadioButtonandroid:idid/rb_welfareandroid:layout_width80dpandroid:layout_height20dpandroid:text摇红包 //RadioGroup 3.2在活动页面声明如下变量 private int mMode; // 游戏模式private final int MODE_DICE 0; // 游戏模式1摇骰子private final int MODE_WELFARE 1; // 游戏模式2摇红包private boolean mState false; // 游戏状态private int diceCount; // 统计摇骰子次数private int welfareNumber; // 统计红包个数private final int[] welfareArr {1, 5, 10} ; // 红包可根据情况调整 3.2在活动页面中编写单选按钮组事件监听器该监听器继承自RadioGroup.OnCheckedChangeListener。通过单选按钮的改变触发响应事件在onCheckedChanged方法中编写游戏模式变更的逻辑代码。 Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {// 根据单选按钮结果设置游戏模式if (checkedId R.id.rb_dice) {mMode MODE_DICE; // 摇骰子模式} else if (checkedId R.id.rb_welfare) {mMode MODE_WELFARE; // 摇红包模式}} 4.游戏的执行逻辑 4.1游戏模式选择。默认是选中了摇一摇模式。 4.2点“开始”按钮。当前是非游戏状态将变量diceCount和welfareNumber都设为0将游戏状态变量mState设为Ture页面中显示“请开始摇手机”将按钮文本改为停止。游戏过程中游戏模式可随时切换不会终止游戏。 4.3只有mState为Ture时摇动手机才会进行检测。当检测到有效摇动时手机会振动300毫秒并执行startGame方法延时300毫秒后执行避免此方法实际执行次数与振动次数有大的差异。 4.4startGame方法中首先检查游戏模式。 如果是摇骰子模式则产生三个1-6的随机数设定为三个骰子。将本次的结果显示在页面上并将摇骰子次数统计变量diceCount加1。 如果是摇红包模式则产生一个1-10的随机数将该随机数与数组welfareArr中的元素进行对比如果该随机数在数组中则在页面中显示中奖信息。获得红包统计变量welfareNumber加1。 5.游戏状态下点“停止”按钮结束游戏。将按钮文本改为开始页面中显示摇骰子次数和获得红包个数。 三、代码展示 最终的代码如下 1. 界面设计文件  activity_shake.xml ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.ShakeActivityTextViewandroid:idid/tv_titleandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop20dpandroid:text摇一摇android:textSize28spandroid:textStyleboldapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent /LinearLayoutandroid:idid/ll_modeandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginStart10dpandroid:layout_marginTop30dpandroid:layout_marginEnd10dpandroid:orientationhorizontalapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/tv_titleTextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenter_verticalandroid:gravitycenter_horizontalandroid:text游戏模式 /RadioGroupandroid:idid/rg_modeandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationhorizontalRadioButtonandroid:idid/rb_diceandroid:layout_width80dpandroid:layout_height20dpandroid:checkedtrueandroid:text摇骰子 /RadioButtonandroid:idid/rb_welfareandroid:layout_width80dpandroid:layout_height20dpandroid:text摇红包 //RadioGroup/LinearLayoutButtonandroid:idid/btn_startandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop30dpandroid:text开始app:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/ll_mode /TextViewandroid:idid/tv_shakeandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop30dpandroid:textSize17spapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/btn_start //androidx.constraintlayout.widget.ConstraintLayout 2.逻辑代码 ShakeActivity.java import androidx.appcompat.app.AppCompatActivity;import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.os.Handler; import android.os.Vibrator; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.RadioGroup; import android.widget.TextView;import java.util.Arrays; import java.util.Locale; import java.util.Random;public class ShakeActivity extends AppCompatActivity implements SensorEventListener,RadioGroup.OnCheckedChangeListener, View.OnClickListener {private final static String TAG ShakeActivity;private TextView tv_shake; // 声明一个文本视图对象private SensorManager mSensorMgr; // 声明一个传感管理器对象private Vibrator mVibrator; // 声明一个震动器对象private Button btn_start; // 开始按钮private int mMode; // 游戏模式private final int MODE_DICE 0; // 游戏模式1摇骰子private final int MODE_WELFARE 1; // 游戏模式2摇红包private boolean mState false; // 游戏状态private int diceCount; // 统计摇骰子次数private int welfareNumber; // 统计红包个数private final int[] welfareArr {1, 5, 10} ; // 红包 , 20, 50, 100, 500, 1000Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_shake);// 游戏模式选择按钮组RadioGroup rg_mode findViewById(R.id.rg_mode);rg_mode.setOnCheckedChangeListener(this);tv_shake findViewById(R.id.tv_shake);btn_start findViewById(R.id.btn_start);btn_start.setOnClickListener(this); // 开始按钮点击监听// 从系统服务中获取传感管理器对象mSensorMgr (SensorManager) getSystemService(Context.SENSOR_SERVICE);// 从系统服务中获取震动器对象mVibrator (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);mMode MODE_DICE; // 单选按钮初始状态选中的遥骰子}Overrideprotected void onPause() {super.onPause();mSensorMgr.unregisterListener(this); // 注销当前活动的传感监听器}Overrideprotected void onResume() {super.onResume();// 给加速度传感器注册传感监听器mSensorMgr.registerListener(this,mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);}Overridepublic void onSensorChanged(SensorEvent event) {if (event.sensor.getType() Sensor.TYPE_ACCELEROMETER) { // 加速度变更事件// values[0]:X轴values[1]Y轴values[2]Z轴float[] values event.values;if ((Math.abs(values[0]) 30 || Math.abs(values[1]) 30|| Math.abs(values[2]) 30)) {if (mState) {mVibrator.vibrate(300); // 系统检测到摇一摇事件后震动手机提示用户new Handler().postDelayed(() - {// 延时后要执行的代码startGame();}, 300); // 延迟时间毫秒}}}}Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// 当传感器精度改变时回调该方法一般无需处理}Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {// 根据单选按钮结果设置游戏模式if (checkedId R.id.rb_dice) {mMode MODE_DICE; // 摇骰子模式} else if (checkedId R.id.rb_welfare) {mMode MODE_WELFARE; // 摇红包模式}}Overridepublic void onClick(View v) {if (v.getId() R.id.btn_start) {if (mState) { // 点击时处于游戏状态btn_start.setText(开始);String info String.format(Locale.CHINESE, %s%d次%s%d个。,本次摇骰子, diceCount, 获得红包, welfareNumber);tv_shake.setText(info);} else { // 点击时处于非游戏状态diceCount 0;welfareNumber 0;tv_shake.setText(请开始摇手机);btn_start.setText(停止);}mState !mState;}}private void startGame() {String info ; // 检查游戏模式if (mMode MODE_DICE) { // 摇骰子// 设定有3个骰子产生3个1-6的随机数Random random new Random();int dice1 random.nextInt(6) 1;int dice2 random.nextInt(6) 1;int dice3 random.nextInt(6) 1;info String.format(Locale.CHINESE,%s%d%d%d。, 您摇出的骰子点数是,dice1, dice2, dice3);diceCount 1;} else if (mMode MODE_WELFARE) { // 摇红包int lottery;info 很遗憾您没有中奖;// 生成一个0-10的随机数int randomNumber (int)(Math.random() * 11); // 1001Log.d(TAG, 随机数为 randomNumber);// 检查该随机数是否在红包列表中boolean isInArray Arrays.stream(welfareArr).anyMatch(n - n randomNumber);if (isInArray) {lottery randomNumber;info String.format(Locale.CHINESE,%s%d%s, 恭喜您中了, lottery,元!);welfareNumber 1;}}tv_shake.setText(info);} }
http://www.sczhlp.com/news/200574/

相关文章:

  • 东莞网站建设时间WordPress会员密码查看
  • 阿里面试:Redis挂了怎么办?集群 节点挂,怎么 恢复数据? 多长时间 的数据 可能 丢失?
  • Ubuntu 上安装 PHP 环境
  • 2025年工业陶瓷厂家 TOP 企业品牌推荐排行榜,工业陶瓷,氧化铝陶瓷推荐这十家公司!
  • 网站备案类型唐山网站制作专业
  • 开源电商网站建设价格wap建站软件
  • 做pc端网站如何郴州新网招聘信息招聘频道
  • 做的网站浏览器提示不安全网站售价
  • 网站改名 备案伍佰亿营销型网站
  • 微网站域名查找公司信息的网站
  • 网站推广的分类全球外贸采购网
  • 做捐款网站广州招聘网网站开发
  • 表白网站制作模板公司宣传一般建的是网页还是网站
  • 广东广实建设有限公司网站长沙好的设计公司
  • 网站建设与排名wordpress按住标题没有显
  • 建设网站阿里云服务器帮人做网站
  • 免费追剧网站哈尔滨网络推广经理招聘
  • 展示网站系统架构设计wordpress变慢了
  • h5互动网站建设泉州手机端建站模板
  • 设计手机网站建设网站搭建与生成技术教材
  • 网站建设作业wordpress扁平化中文主题下载
  • Dash to Dock
  • 2025 年碳纤维布厂家 TOP 企业品牌推荐排行榜,碳纤维布 / 建筑碳纤维布 / 加固碳纤维布 / 300 克碳纤维布 / 碳纤维加固布公司推荐!
  • 2025年空调系统/锅炉房运维服务厂家最新权威推荐榜:专业托管运维与设备维修外包服务深度解析
  • 混乱的置换 解题报告
  • 北京建网站公司哪家便宜CC wordpress 攻击
  • 做的网站错位怎么办p2p网站数据分析怎么做
  • 做毕业设计网站需要的工具porto wordpress汉化版
  • 网站设计专业实验室建设做门户网站用什么系统
  • 企业网站的用户需求表情制作器