bool isShaked = false;
int _curentIndex = 0;
StreamSubscription _streamSubscription;
static const int SHAKE_TIMEOUT = 500;//晃动时间
static const double SHAKE_SHRESHOLD = 3.25;//晃动时间
var _lastShakeTime = 0;//上次晃动的时间
@override
void initState() {
// TODO: implement initState
super.initState();
_streamSubscription = accelerometerEvents.listen((event) {
var now = DateTime.now().millisecondsSinceEpoch;
if((now - _lastShakeTime) > SHAKE_TIMEOUT) {
var x = event.x;
var y = event.y;
var z = event.z;
double accelerate = sqrt(x* x + y * y + z * z) - 9.8;
//加速度如果超过阈值
if(accelerate > SHAKE_SHRESHOLD) {
//手机晃动
Vibration.vibrate();
_lastShakeTime = now;
if(!mounted) return;
setState(() {
isShaked = true;
});
}
}
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_streamSubscription.cancel();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(‘摇一摇’),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
‘assets/images/shake.png’,
width:120.0,
height: 120.0,
),
SizedBox(
height: 10.0,
),
Text(isShaked?‘活动结束’:‘摇一摇获取礼品’),
],
),
),
//底层的导航栏,2个导航栏
bottomNavigationBar: BottomNavigationBar(
//2个条目
items: [
BottomNavigationBarItem(icon: Icon(Icons.folder), title: Text(‘礼品’)),
BottomNavigationBarItem(
icon: Icon(Icons.assignment), title: Text(‘资讯’))
],
currentIndex: _curentIndex,
onTap: (index) {
if (!mounted) return;
setState(() {
_curentIndex = index;
});
},
),
);
}
}
discovery_page.dart
import ‘package:barcode_scan/barcode_scan.dart’;
import ‘package:flutter/material.dart’;
import ‘package:flutterapp2/pages/shake_page.dart’;
import ‘common_web_page.dart’;
/**
- 主界面find
*/
class DiscoveryPage extends StatefulWidget {
@override
_DiscoveryPageState createState() => _DiscoveryPageState();
}
class _DiscoveryPageState extends State {
List<Map<String, IconData>> blocks = [
{
‘开源众包’: Icons.pageview,
‘开源软件’: Icons.speaker_notes_off,
‘码云推荐’: Icons.screen_share,
‘代码骗贷’: Icons.assignment,
},
{
‘扫一扫’: Icons.camera_alt,
‘摇一摇’: Icons.camera,
},
{
‘码云封面人物’: Icons.person,
‘线下活动’: Icons.android,
}
];
void _handleItemClick(String title) {
switch (title) {
case ‘开源众包’:
_navToWebPage(title, ‘https://zb.oschina.net/’);
break;
case ‘扫一扫’:
scan();
break;
case ‘摇一摇’:
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => ShakePage()));
break;
}
}
Future scan() async {
String barcode = await BarcodeScanner.scan();
print(“Debug barcode==” + barcode);
}
void _navToWebPage(String title, String url) {
if (title != null && url != null) {
Navigator.of(context).push(MaterialPageRoute(
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
【Android高级架构视频学习资源】
ster/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
[外链图片转存中…(img-al91NuLp-1646555894206)]
【Android高级架构视频学习资源】