返回顶部
首页 > 资讯 > 移动开发 >Android 图片切换器(dp、sp、px) 的单位转换器
  • 658
分享到

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

dppx图片切换器Android 2022-06-06 01:06:32 658人浏览 独家记忆
摘要

Android 图片切换器 这几天一直在整理组件想留着以后使用.还是一点一点整理吧.今天把上周整理的 ImageSwitcher 和单位转换器(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的位置/大小属性.
        
        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;

public class DisplayUtils {
  
  public static int px2dip(Context context,float pxValue){
    final float scale =context.getResources().getDisplayMetrics().density;
    return (int) (pxValue/scale +0.5f);
  }
  
  public static int dip2px(Context context ,float dipValue){
    final float scale =context.getResources().getDisplayMetrics().density;
    return (int) (dipValue*scale+0.5f);
  }
  
  public static int px2sp(Context context,float pxValue){
    final float fontScale =context.getResources().getDisplayMetrics().density;
    return (int) ((pxValue/fontScale)+0.5f);
  }
  
  public static int sp2dip(Context context ,float spValue){
    final float scale =context.getResources().getDisplayMetrics().density;
    return (int) (spValue*scale+0.5f);
  }
  
  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 代码中,转换代码就比较方便了.

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

您可能感兴趣的文章:Android编程实现图片背景渐变切换与图层叠加效果android中实现背景图片颜色渐变方法Android开发之使用ViewPager实现图片左右滑动切换效果Android编程单击图片实现切换效果的方法Android中ViewPager组件的基本用法及实现图片切换的示例Android实现图片轮播切换实例代码Android自定义ImageView实现点击两张图片切换效果Android应用中图片浏览时实现自动切换功能的方法详解android控件实现多张图片渐变切换


--结束END--

本文标题: Android 图片切换器(dp、sp、px) 的单位转换器

本文链接: https://lsjlt.com/news/21933.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作