导航:首页 > 操作系统 > android仿图片查看

android仿图片查看

发布时间:2023-03-21 21:44:32

‘壹’ android如何实现图片预览

main.xml

先定义一个GridView,然后再定义一个ImageSwitcher

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="horizontal">

<GridView

android:id="@+id/gridView1"

android:layout_height="fill_parent"

android:layout_width="300px"

android:layout_marginTop="6px"

android:horizontalSpacing="3px"

android:verticalSpacing="3px"

android:numColumns="4"/>

<ImageSwitcher

android:id="@+id/imageSwicher1"

android:padding="20px"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

></ImageSwitcher>

</LinearLayout>

MainActivity代码如下

{

privateint[]imageId=newint[]{R.drawable.w1,R.drawable.w2,

R.drawable.w3,R.drawable.w4,R.drawable.w5,R.drawable.w6};

;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

//TODOAuto-generatedmethodstub

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

imageSwitcher=(ImageSwitcher)findViewById(R.id.imageSwicher1);

imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,

android.R.anim.fade_in));//设置淡入动画

imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,

android.R.anim.fade_out));//设置谈出动画

imageSwitcher.setFactory(newViewFactory(){

@Override

publicViewmakeView(){

//TODOAuto-generatedmethodstub

ImageViewimageView=newImageView(MainActivity.this);//实例化一个ImageView类的对象

imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);//设置保持纵横比居中缩放图像

imageView.setLayoutParams(newImageSwitcher.LayoutParams(//主要要是用ImageSwitcher的LayoutParams

LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

returnimageView;

}

});

imageSwitcher.setImageResource(imageId[0]);

GridViewgridView=(GridView)findViewById(R.id.gridView1);

BaseAdapteradapter=newBaseAdapter(){

/*

*获得数量

*

*@seeandroid.widget.Adapter#getCount()

*/

@Override

publicintgetCount(){

//TODOAuto-generatedmethodstub

returnimageId.length;

}

@Override

publicObjectgetItem(intposition){

//TODOAuto-generatedmethodstub

returnposition;

}

/**

*获得当前选项

*/

@Override

publiclonggetItemId(intposition){

//TODOAuto-generatedmethodstub

returnposition;

}

@Override

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){

//TODOAuto-generatedmethodstub

ImageViewimageView;

if(convertView==null){

imageView=newImageView(MainActivity.this);

/**设置图像的宽度和高度**/

imageView.setAdjustViewBounds(true);

imageView.setMaxWidth(150);

imageView.setMaxHeight(113);

imageView.setPadding(5,5,5,5);

}else{

imageView=(ImageView)convertView;

}

imageView.setImageResource(imageId[position]);

returnimageView;

}

};

gridView.setAdapter(adapter);

gridView.setOnItemClickListener(newOnItemClickListener(){

@Override

publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,

longarg3){

//TODOAuto-generatedmethodstub

imageSwitcher.setImageResource(imageId[arg2]);//显示选中的图片

}

});

}

}

‘贰’ Android 简单的图片查看器

说明:在文件管理器中,可以使用这个app来打开图片

ImageView 常用的一些XML属性和方法:

支持的scaleType 属性:

在打开图片的Activity里需要必须设置以下三个属性:

可以通过设置 mimeType 来关联对应的类型,比如: mimeType="vedio/* 关联视频格式的文件等。

详细可以参考: Android 常用 mimeType 表

读取图片,需要写入到外部存储器(SD卡)的权限:
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

如果是 API23 以上还需要动态权限:

自定义权限的格式: 包名.permission.权限名
自定义权限需要在 Manifest 文件里使用 <permission android:name="..." /> 语法 进行注册。
PackageManager.PERMISSION_GRANTED 表示权限允许; PackageManager.PERMISSION_DENIED 表示权限拒绝。

‘叁’ android系统查看图片的软件

android自带的软件是gallery。market上面我族罩没有用过,你可以搜索gallery 3D这个AP。

SD卡的东西在android上,是没有原生的脊衡程序支持的。如果想要查看,请到market上兆野闹下载filebrowser或者sd card browser等软件来查看。

‘肆’ android怎样实现查看对应图片的功能

亲,看下来辩颂圆自樱蔽csdn大牛的解携塌答
http://blog.csdn.net/chenjie19891104/article/details/6336439

‘伍’ Android 图片选择(ImageSelector) (拍照,裁剪,压缩,查看)

1.遍历sdcard文件夹(指定层次深度 searchDeep ),如果文件夹发现图片 , 添加到已搜索到图片的文件列表中,并跳入下一个文件夹搜索

2.使用 ContentResolver 搜索 添加搜索标签(png,jpg,jpeg,gif 等) 优点:更快速

压缩调用

第一步-->

采样率压缩:设置 BitmapFactory.Options.inSampleSize 大小

第二步-->

PNG:尺寸压缩( Config:ARGB_4444 ,工具: Canvas );

JPG:尺寸压缩( Config:ARGB_565 ,工具: Canvas )+压缩质量( bitmap.compress() )

注 :

1.GIF不做压缩处理

2.尺寸压缩:改变宽高(png,jpg)

3.压缩质量:改变文件大小(适用jpg,png无效)

‘陆’ 在android平台上怎么实现像图片的浏览 左右滑动切换图片,然后底部是圆点显示当前是哪一个图片

安卓5.0自带左右滑动切换图片的功能

一、依次点 应用程序---相册

‘柒’ 如何优雅地在Android上实现iOS的图片预览

原文博客链接

用过 iOS 的都知道,拟物理的回弹效果在上面非常普遍,因为这是 iOS 系统支持的一套 UI 框架,但是 Android 就没有了,就拿图片查看器来讲,iOS 的效果就是感觉一张图片被绑定在了弹簧装置上,滑动很自然,Android 没有自带的图片查看器,需要自己实现

市面上主流的图片查看器都没有回弹的效果,一部分原因是没有这个需求,还有一部分是实现麻烦,这里讲述一个个人认为最好的方案

一个图片查看器,要求可以滑动 Fling,触碰到边界的时候回弹,有越界回弹的效果,支持双指缩放,双击缩放

咋一看需求,应该好写,滚动的时候用 Scroller 来解决,回弹效果直接用 ValueAnimator ,设置插值器为减速插值器来解决。看似简单,但是因为是仿物理效果,中间牵扯到从滚动到回弹的时候( Scroller 动画切换到 ValueAnimator 动画)的速度衔接问题,要看上去从滚动到开始回弹至结束没有突兀,中间的特判边界处理是很麻烦的,还要牵扯到缩放,所以不考虑这种方案

既然是要模拟现实中的物理效果,为何不在每一帧根据当前的状态得到对用的加速度,然后去计算下一帧的状态位置,这样只要模拟现实中的物理加速度不就可以实现了吗,那些边界特判之类的就可以去见阎王了

方案确定完毕,接下来就是选定加速度的方程,要模拟弹簧的效果,拉力很简单,用胡克定律嘛! F = k * dx ,摩擦力呢? Ff = μ*FN ? 这里推荐一个更加好的方案,借鉴自 Rebound 库,这是 Facebook 的一个弹簧动画库,设定一个目的数值,它会根据当前的拉力,摩擦力,速度然后变化到目标值,加速度方程为

其中 tension 为弹性系数, friction 为摩擦力系数,为什么让摩擦力和速度成正比呢?如果摩擦力和速度成正比,那么就不存在静摩擦力,也就是不存在物体静止情况下拉力小于摩擦力的情况(因为速度为0的时候,阻力为0,除非拉力为0),物体肯定会向目标地点靠近,遏制了物体摩擦力过大而无法达到目的地情况

为了方便接入各种 View ,设计一个 ZoomableGestureHelper 类

设计目的,我只需要知道视图的大小边界 (bounds) 和内部可滚动回弹的边界 (innerBounds),就可以通过计算得到一个新的转换矩阵

对于物理状态,需要一个类 SpringPhysicsState 来做存储,里面包含了速度、拉力系数、摩擦力系数,不保存位置,因为位置是通过 getBounds 动态计算得到的

速度分解成水平方向和垂直方向,因为处理方法一样,下面只讲述垂直方向的计算

状态1 :其中一边有越界

分析一下上图中的位置,蓝色部分为内部图片,它被拖动越界了,此时的合力应该为 tension * dx - friction * v , v 为图片在 y 轴方向上的速度,( dx 和 v 都是矢量,我暂且设置向右和向下为正),之后就直接调用 invalidate(); ,就可以播放动画了。

状态2:两边都没越界

此时因为两边都没有越界,所以应该不存在拉力,可以认为此时 dx 为0,摩擦力需要注意下,因为可以支持滑动( Fling ),所以此时的摩擦力要比之前越界回弹时候的摩擦力小,至于具体数值,文末会给出

状态3:两边都超出

此时两边都超出边界,蓝色区域应该和红色区域中心绑定,所以此时的 dx 为 dxBottom - dxTop (注意符号,因为 dx 为矢量,所以不能是 dxTop - dxBottom )

缩放的方法和移动一致,设定 tension 和 friction ,边界设定为外面红色的框框,蓝色区域无法某一边充满红色区域的时候,有拉力,否则没拉力,摩擦力一直存在,至于双击放大和放小,只需要在双击的时候给缩放状态设置一个初速度,然后 invalidate(); ,搞定!是不是很简单啊

时间这一个参数在计算中是非常重要的,这关系到当前微分状态的数值变化,假如用欧拉方法模拟速度和位置的变化, x' = x + v * dt , v' = v + a * dt ,公式可以看出时间决定了动画的快慢,为了接近现实物理时间,这里采用的时间单位为秒(计算机中常用的是毫秒)

确定了单位,还需要控制一下时间间隔的数值范围,我们不能让两次 computeScroll 的时间间隔过于短或者过于长,这里采用的策略为固定每次计算时候的时间间隔,如果两次 computeScroll 的时间间隔小于此时间间隔,那么保存累计时间间隔,等待下一次 computeScroll ,直到大于等于固定的时间间隔,再用 while 循环一步一步的计算

结束判定是唯一的一个坑,因为计算机只是在 dt 时间内模拟速度和位移的变化,不是通过微积分计算的,存在误差,比如欧拉方法 x' = x + v * dt 和 v' = v + a * dt 计算得到的 x' 和 v' 都是近似数值,把 dt 这段时间内的变化看成了匀变速运动

所以结束判定还需要设置一个阈值,当速度和偏移量小于此数值的时候,可以认定为达到了目的地

对于 ViewPager 的适配有些问题,如果在 Down 的时候 requestDisallow true 移动过程中到了左右边界又 requestDisallow false ,此时 ViewPager 会有一个突变( 突变可耻但有用 ),而且多指头的时候可能会崩溃,这是 ViewPager 的 Bug,具体细节请看源码

‘捌’ Android实现图库功能,查看本应用drawable下的所有图片,且能左右滑动切换上一页或下一页图片

使用ImageLoader
源码地址
https://github.com/nostra13/Android-Universal-Image-Loader
可以通过这个框架来加载以下类型的图片
"http://site.com/image.png" // from Web
"file:///mnt/sdcard/image.png" // from SD card
"file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail)
"content://media/external/images/media/13" // from content provider
"content://media/external/video/media/13" // from content provider (video thumbnail)
"assets://image.png" // from assets
"drawable://" + R.drawable.img // from drawables (non-9patch images)

官网有例子,使用非常简单,一行代码搞定

‘玖’ android 怎么样点击图片实现该图片的预览

android手机实现图片预览的橘敏方法有两种:
1、akepicture的时候 如果不开启下一次 startPreview 应该停留在上一次取经的回显界面。 这时候 让两个button 也就是你的确定和取消要做什么。
2、akepicture后 stopPreview 然后 将返回的data 编程纳顷bitmap set到一个imageView上面
同时也是洞伍陆显示出来两个button 然后要进行操作。

阅读全文

与android仿图片查看相关的资料

热点内容
python符号表达式 浏览:32
威驰压缩机继电器 浏览:869
华为手机怎么设置移动数据app 浏览:957
空调压缩机哪的厂家多 浏览:388
手指速算法24加7怎么算 浏览:137
如何用python写vlookup函数 浏览:796
社保加密狗厂商 浏览:214
php编译运行说法 浏览:955
程序员说喂 浏览:256
抖音直播云服务器 浏览:627
一加7pro文件夹data 浏览:424
程序员淋雨 浏览:965
python输出数字序列中的空格 浏览:78
怎么将pdf文件大小 浏览:734
氧原子相对分子量算法 浏览:988
加密机为什么是安全的 浏览:451
单片机拼音输入法 浏览:807
苹果笔记本t2加密芯片怎么打开 浏览:797
安卓如何把手机投屏至电视 浏览:759
方舟编译器现在可提速哪些软件 浏览:61