Android 图片切换器(dp、sp、px) 的单位转换器

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 的组件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/layout"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:gravity="center"
  android:orientation="horizontal">

  <Button
    android:id="@+id/up_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="上一张" />

  <!-- 图像转换器-->
  <ImageSwitcher
    android:id="@+id/main_imageswitcher"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" />

  <Button
    android:id="@+id/down_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="下一张" />

</LinearLayout>

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 代码中,转换代码就比较方便了.

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android编程实现屏幕自适应方向尺寸与分辨率的方法

    本文实例讲述了Android编程实现屏幕自适应方向尺寸与分辨率的方法.分享给大家供大家参考,具体如下: Android 屏幕自适应方向尺寸与分辨率,包括屏幕界面布局.多分辨率支持.获取屏幕尺寸.屏幕横屏与竖屏等,android 模拟器横屏,android 虚拟机横屏,android 判断横屏,android 禁止横屏,android 强制横屏,android 横屏事件,android 自适应分辨率,android 屏幕自适应,android 图片自适应,android 横屏布局. 屏幕界面布局

  • 解析android中的dip,dp,px,sp和屏幕密度

    1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. 这里要特别注意dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示.在屏幕密度为160的显示屏上,1dip=1px,有时候可能你的屏幕分辨率很大如480*800,但是屏幕密度没有正确设置比如说还是160,那么这个时候凡是使用dip的都会显示异常,基本

  • Android中的常用尺寸单位(dp、sp)快速入门教程

    常见尺寸单位 Android开发中的常用尺寸单位有如下几种: dp (dip) px pt inch sp 算不知道确切含义,相信对于以上这几种尺寸单位大家也都比较脸熟,这里先让我们重新认识一下它们: dp (dip): 即设备无关像素(device independent pixels),这种尺寸单位在不同设备上的物理大小相同. px:即像素(pixel),这个不用多说. pt:通常用来作为字体的尺寸单位,1 pt相当于1/72英寸. inch:英寸,1 英寸约等于2.54厘米,主要用来描述手

  • Android的单位以及屏幕分辨率详解

    一.常用的单位:相对单位主要有:px.sp.dp绝对单位主要有:pt.in.mm 二.单位应用总结:一般用相对单位,而不是绝对单位1.字体的大小一般使用SP,用此单位的字体能够根据用户设置字体的大小而自动缩放 2.空间等相对距离一般使用dp(dip),随着密度变化,对应的像素数量也变化,但并没有直接的相对比例的变化. 3.px与实际像素有关,及与密度有关!dp和sp和实际像素没有关系,对于一定分辨率但不同密度的屏幕,px单位的应用可能会导致长度的相对比例的变化. 三.密度与分辨率:密度值表示每英

  • Android中dip、dp、sp、pt和px的区别详解

    1.概述过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小.在有些情况下,用户界面可能会小到难以看清内容.由此我们采用与分辨率无关的度量单位来开发程序就能够解决这个问题.Android应用开发支持不同的度量单位. 2.度量单位含义dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持

  • 详解Android应用中屏幕尺寸的获取及dp和px值的转换

    获取屏幕尺寸 通过WindowManager获取 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); //其中display = getWindowManager().getDefaultDisplay() 获得了一个DefaultDisplay对象; 然后 display.getMetrics(dm) 把屏幕尺寸信息赋值给DisplayMetrics d

  • android app icon 图标大小尺寸

    在android程序中,在drawable中设置好图标后,但结果在小米2可没有显示出来,但在我自己的htc中和模拟器中显示正常.后来发现小米的dpi不一样. 后来发现,android为了适应不同的分辨率和dpi,加载了一系列的图标. LDPI (Low Density Screen,120 DPI),其图标大小为 36 x 36 px. MDPI (Medium Density Screen, 160 DPI),其图标大小为 48 x 48 px. HDPI (High Density Scre

  • android计算pad或手机的分辨率/像素/密度/屏幕尺寸/DPI值的方法

    手机分辨率基础知识(DPI,DIP计算) 1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托罗拉milestone手机是3.7英寸 Aspect Ratio(宽高比率) 指的是实际的物理尺寸宽高比率,分为long和nolong Milestone是16:9,属于long Resolution(分辨率) 和电脑的分辨率概念一样,指手机屏幕纵.横方向像素个数 Milestone是854*480

  • Android 图片切换器(dp、sp、px) 的单位转换器

    Android 图片切换器 这几天一直在整理组件想留着以后使用.还是一点一点整理吧.今天把上周整理的 ImageSwitcher 和单位转换器(dp/sp/px). 下面上内容 ImageSwitcher: 图像查看器,好像是老组件了,今天先更一个基础的组件,后期如果有时间继续扩展. 那么图像查看器,就是和 Windows 系统下的图片查看器比较类似.自带上一张和下一张的功能. 这个组件有以下几个特点,本人感觉: 1.该组件属于容器性质; 2.ImageSwitcher 本身继承了 FrameL

  • Android图像切换器imageSwitcher的实例应用

    图像切换器(ImageSwitcher),用于实现类似于windows操作系统下的windows照片查看器中的上一张 下一张切换图片的功能,在使用ImageSwitcher时,必须实现ViewSwitcher.ViewFactory接口,并通过makeView()方法来创建显示图片的ImageView.makeView()方法将返回一个显示图片的imageView.再使用图像切换器时,还有一个方法非常重要,那就是setImageResource()方法,该方法用于指定要在ImageSwitche

  • ImageSwitcher图像切换器的使用实例

    本文实例为大家分享了ImageSwitcher图像切换器的实现代码,供大家参考,具体内容如下 描述 在该实例中,提供一个图片切换器和两个点击按钮,用于切换图片,并用一个TextView显示图片信息.其中,当前图片若为最后一张,点击下一张,则跳转到第一张:同理,第一张图片点击上一张,则显示最后一张图片,循环查看当前图片. 目标效果图如下所示: 页面布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi

  • Android高级组件ImageSwitcher图像切换器使用方法详解

    图像切换器(ImageSwitcher),用于实现类似于Windows操作系统的"Windows照片查看器"中的上一张.下一张切换图片的功能.在使用ImageSwitcher时,必须实现ViewSwitcher.ViewFactory接口,并通过makeView()方法来创建用于显示图片的ImageView.makeView()方法将返回一个显示图片的ImageView.在使用图像切换器时,还有一个方法非常重要,那就是setImageResource方法,该方法用于指定要在ImageS

  • Android UI控件之ImageSwitcher实现图片切换效果

    本文实例为大家分享了geSwitcher实现图片切换效果的具体代码,供大家参考,具体内容如下 从该名字就可以看出来,ImageSwitcher是一个图片切换控件,可以在一系列的图片中,逐张的显示特定的图片,利用该控件可以实现图片浏览器中的上一张,下一张的功能.其使用方法也较 为简单,不过需要注意的是ImageSwitcher在使用的时候需要一个ViewFactory,用来区分显示图片的容器和他的父窗口. 具体的用法直接看实例,照例,先上效果图 看看下一张的效果: 布局文件就不多谈了直接看Main

  • Android实现图像切换器

    本文实例为大家分享了Android实现图像切换器的具体代码,供大家参考,具体内容如下 java代码: private int[] imageId = new int[] { R.drawable.img01, R.drawable.img02, R.drawable.img03, R.drawable.img04, R.drawable.img05, R.drawable.img06, R.drawable.img07, R.drawable.img08, R.drawable.img09 };

  • Android实现的可以调整透明度的图片查看器实例

    本文以实例讲解了基于Android的可以调整透明度的图片查看器实现方法,具体如下:  main.xml部分代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"

  • Android自定义ViewPager实现个性化的图片切换效果

    第一次见到ViewPager这个控件,瞬间爱不释手,做东西的主界面通通ViewPager,以及图片切换也抛弃了ImageSwitch之类的,开始让ViewPager来做.时间长了,ViewPager的切换效果觉得枯燥,形成了审美疲劳~~我们需要改变,今天教大家如何改变ViewPager切换时的效果,实现个性化的图片切换 看一下这样效果的图片切换: 是不是比传统的效果个性很多,嘿嘿~~其实很简单,学习完这篇文章,保证你可以自定义切换效果,做出各式各样的效果. 1.制作前的分析 观察下效果图,实际上

  • Android 简单的图片查看器源码实现

    本文介绍了Android 简单的图片查看器源码实现,分享给大家,具体如下: public class MainActivity extends Activity { private EditText et_path; private ImageView iv; //创建handler 对象 // private Handler handler = new Handler(){ // // //处理消息 // public void handleMessage(android.os.Message

随机推荐