android grideview 图片png透明,Flutter中图片GridView展示及放大效果

使用的组件:

在pubspec.yaml中添加:

photo_view: ^0.4.2

图片文件:

assets:

- assets/images/1.jpg

- assets/images/2.jpg

- assets/images/3.jpg

- assets/images/4.jpg

- assets/images/5.jpg

- assets/images/6.jpg

- assets/images/7.jpg

- assets/images/8.jpg

- assets/images/9.jpg

- assets/images/10.jpg

- assets/images/11.jpg

- assets/images/12.jpg

- assets/images/13.jpg

- assets/images/14.png

- assets/images/15.jpg

效果展示:

24c44ca26c1f219233495ce27e3a20bd.png

f2d4740fbf982de4d1dd1f12b5cc1df0.png

a3ccb6014360083f41ef9cae9ddd80bf.png

直接上代码了:import 'package:flutter/material.dart';

import 'package:flutter/rendering.dart';

import 'package:flutter/foundation.dart';

import 'package:photo_view/photo_view.dart';

import 'package:photo_view/photo_view_gallery.dart';

class PhotoViewPage extends StatefulWidget {

@override

_PhotoViewPageState createState() => _PhotoViewPageState();

}

class _PhotoViewPageState extends State {

List assetNames = [

'assets/images/2.jpg',

'assets/images/3.jpg',

'assets/images/4.jpg',

'assets/images/5.jpg',

'assets/images/6.jpg',

'assets/images/7.jpg',

'assets/images/8.jpg',

'assets/images/9.jpg',

'assets/images/10.jpg',

'assets/images/11.jpg',

'assets/images/12.jpg',

'assets/images/13.jpg',

'assets/images/14.png',

'assets/images/15.jpg',

];

@override

Widget build(BuildContext context) {

return Scaffold(

body: _scrollView(context),

);

}

Widget _scrollView(BuildContext context) {

return Container(

child: CustomScrollView(

slivers: [

SliverPersistentHeader(

pinned: false,

delegate: HeroHeader(

minExtent: 100.0,

maxExtent: 250.0,

),

),

SliverGrid(

gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(

maxCrossAxisExtent: 250.0,

mainAxisSpacing: 1,

crossAxisSpacing: 1,

childAspectRatio: 1,

),

delegate: SliverChildBuilderDelegate(

(BuildContext context, int index) {

return Container(

alignment: Alignment.center,

padding: _edgeInsetsForIndex(index),

child: InkWell(

onTap: () {

//debug:

print(assetNames[index]);

Navigator.of(context)

.push(MaterialPageRoute(builder: (context) {

return PhotoPreview(

initialIndex: index,

photoList: assetNames,

);

}));

},

child: Image.asset(

assetNames[index],

height: 250.0,

width: 250.0,

fit: BoxFit.cover,

),

));

},

childCount: assetNames.length,

),

),

],

),

);

}

EdgeInsets _edgeInsetsForIndex(int index) {

if (index % 2 == 0) {

return EdgeInsets.only(top: 4.0, left: 8.0, right: 4.0, bottom: 4.0);

} else {

return EdgeInsets.only(top: 4.0, left: 4.0, right: 8.0, bottom: 4.0);

}

}

}

class HeroHeader implements SliverPersistentHeaderDelegate {

HeroHeader({

this.onLayoutToggle,

this.minExtent,

this.maxExtent,

});

final VoidCallback onLayoutToggle;

double maxExtent;

double minExtent;

@override

Widget build(

BuildContext context, double shrinkOffset, bool overlapsContent) {

return Stack(

fit: StackFit.expand,

children: [

Image.asset(

'assets/images/1.jpg',

fit: BoxFit.cover,

),

Container(

decoration: BoxDecoration(

gradient: LinearGradient(

colors: [

Colors.transparent,

Colors.black54,

],

stops: [0.5, 1.0],

begin: Alignment.topCenter,

end: Alignment.bottomCenter,

tileMode: TileMode.repeated,

),

),

),

Positioned(

left: 16.0,

right: 16.0,

bottom: 16.0,

child: Text(

'PhotoView Gallery',

style: TextStyle(

fontSize: 32.0,

color: Colors.white,

),

),

),

],

);

}

@override

bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) {

return true;

}

@override

FloatingHeaderSnapConfiguration get snapConfiguration => null;

}

//PhotoPreview 点击小图后的效果

class PhotoPreview extends StatefulWidget {

final int initialIndex;

final List photoList;

final PageController pageController;

PhotoPreview({this.initialIndex, this.photoList})

: pageController = PageController(initialPage: initialIndex);

@override

_PhotoPreviewState createState() => _PhotoPreviewState();

}

class _PhotoPreviewState extends State {

int currentIndex;

@override

void initState() {

currentIndex = widget.initialIndex;

super.initState();

}

//图片切换

void onPageChanged(int index) {

setState(() {

currentIndex = index;

});

}

@override

Widget build(BuildContext context) {

return Container(

child: PhotoViewGallery.builder(

scrollPhysics: const BouncingScrollPhysics(),

onPageChanged: onPageChanged,

itemCount: widget.photoList.length,

pageController: widget.pageController,

builder: (BuildContext context, int index) {

return PhotoViewGalleryPageOptions(

imageProvider: AssetImage(widget.photoList[index]),

minScale: PhotoViewComputedScale.contained * 0.6,

maxScale: PhotoViewComputedScale.covered * 1.1,

initialScale: PhotoViewComputedScale.contained,

);

},

),

);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值