时间:2021-05-21
Android 图片切换器
这几天一直在整理组件想留着以后使用.还是一点一点整理吧.今天把上周整理的 ImageSwitcher 和单位转换器(dp/sp/px).
下面上内容
ImageSwitcher:
图像查看器,好像是老组件了,今天先更一个基础的组件,后期如果有时间继续扩展.
那么图像查看器,就是和 Windows 系统下的图片查看器比较类似.自带上一张和下一张的功能.
这个组件有以下几个特点,本人感觉:
1.该组件属于容器性质;
2.ImageSwitcher 本身继承了 FrameLayout, 也可以使用帧布局的一些属性.
3.在使用 ImageSwitcher 的时候,必须实现 ViewSwitcher.ViewFactory 的接口,然后通过复写 makeView() 方法来创建用于显示图片的 ImageView,并且 makeView()方法返回一个显示图片的 ImageView.
4.图片加载 ImageView 上的话,如果是本地资源的话,需要使用 setImageResource() 方法.
上面基本的原理大致描述清楚,下面上代码
XML 布局文件,这里面只有2个按钮和 ImageSwitcher 的组件
Java 代码
public class MainActivity extends AppCompatActivity { //声明并初始化一个保存显示图像id的数组 private int[] imageId = new int[]{R.mipmap.weathericon_graph_01, R.mipmap.weathericon_graph_02, R.mipmap.weathericon_graph_03, R.mipmap.weathericon_graph_04, R.mipmap.weathericon_graph_05}; //当前显示图像的索引 private int index; //声明一个图像切换器对象; private ImageSwitcher imageSwitcher; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //给图像器所有图像设置动画效果 //淡入动画 imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); //淡出动画 imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out)); //设置 imageSwitcher 的视图切换工厂,复写 makeView() 方法 imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() { @Override public View makeView() { imageView = new ImageView(MainActivity.this); //设置图片的尺寸,如何与这个ImageView 相匹配. //@parms FIT_CENTER 保持居中并且缩放图像. imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); //设置 imageView的位置/大小属性. /** * 进行Dp 和px 之间的转换*/ int widpx = DisplayUtils.dip2px(MainActivity.this, 200); int heipx = DisplayUtils.dip2px(MainActivity.this, 200); imageView.setLayoutParams(new ImageSwitcher.LayoutParams( widpx, heipx)); //返回 imageView 对象 return imageView; } }); //使 imageSwitcher 获得显示的图片 imageSwitcher.setImageResource(imageId[index]); findViewById(R.id.up_btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (index > 0) { index--; } else { index = imageId.length - 1; } imageSwitcher.setImageResource(imageId[index]); } }); findViewById(R.id.down_btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (index < imageId.length - 1) { index++; } else { index = 0; } imageSwitcher.setImageResource(imageId[index]); } }); } private void initView() { imageSwitcher = (ImageSwitcher) findViewById(R.id.main_imageswitcher); }在写这个类的同时,由于涉及到 DP<–>PX 之间,然后写了个工具类,下面是工具类
package com.lanouteam.dllo.imageswitcherdemo;import android.content.Context;import android.util.TypedValue;import java.util.TreeSet;/** * Created by dllo on 16/4/4. * dp/sp 转换为px 的工具类; * * */public class DisplayUtils { /** * 将px值转换为 dip 或者dp 值,保证尺寸大小不变. * * @param px Value * @param scale * (DisplayMetrics类中属性 density) * density 就是px 向 dp或sp的换算比例 * * @return * */ public static int px2dip(Context context,float pxValue){ final float scale =context.getResources().getDisplayMetrics().density; return (int) (pxValue/scale +0.5f); } /** * 将 px 值转换为dp 或者 dip 值,保证尺寸大小不变 * @param dipValue * @param scale * (DisplayMetrics类中属性 density) * @return * */ public static int dip2px(Context context ,float dipValue){ final float scale =context.getResources().getDisplayMetrics().density; return (int) (dipValue*scale+0.5f); } /** * 将px 值转换成 sp值,保证文字大小不变 * * @param pxValue * @param fontScale * (DisplayMetrics类中属性 density) * @return * */ public static int px2sp(Context context,float pxValue){ final float fontScale =context.getResources().getDisplayMetrics().density; return (int) ((pxValue/fontScale)+0.5f); } /** * 将 px 值转换为dp 或者 dip 值,保证尺寸大小不变 * @param dipValue * @param scale * (DisplayMetrics类中属性 density) * @return * */ public static int sp2dip(Context context ,float spValue){ final float scale =context.getResources().getDisplayMetrics().density; return (int) (spValue*scale+0.5f); } /** * density 是dp 和sp 相对于px 的换算比例 * 而系统也提供了TypedValue 类帮助转换 * */ protected int dp2px(int dp,Context context){ //通过TypedValue工具类来进行转换 return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dp,context.getResources().getDisplayMetrics()); } protected int sp2px(int sp,Context context){ return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,sp,context.getResources().getDisplayMetrics()); }}有了这个在 Java 代码中,转换代码就比较方便了.
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
电脑转换器是指将一种信号转换成另一种信号的装置。电脑转换器又名KVM切换器,或者叫多电脑切换器,一般简称KVM,KVM为键盘,显示器与鼠标等三个英文单词的首字母
电脑转换器又名KVM切换器,或者叫多电脑切换器,一般简称KVM,KVM为英语中键盘,显示器与鼠标等三个单字字首的缩写。 电脑切换器是一种计算机外围硬件设备,可
在Android开发中dp和px,sp和px之间的转换时必不可少的,网上流传的方法publicclassDisplayUtils{/***convertpxto
本文实例为大家分享了ImageSwitcher图像切换器的实现代码,供大家参考,具体内容如下描述在该实例中,提供一个图片切换器和两个点击按钮,用于切换图片,并用
照片在能转成pdf格式的,但需要借助第三方软件(图片PDF转换器)来实现该功能。图片PDF转换器是一款能将其他图片格式转换成pdf的pdf图片格式转换器,界面非