文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-06 01:23

关注

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控件实现多张图片渐变切换


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯