• Android基础——高级UI组件:图像视图和图片切换器


    layout代码

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/a"
            />
        <!--限制长宽-->
        <ImageView
            android:layout_width="70dp"
            android:layout_height="100dp"
            android:background="#FF0000"
            android:src="@drawable/a"
            />
    
        <!--适应长宽,拉伸-->
        <ImageView
            android:layout_width="70dp"
            android:layout_height="100dp"
            android:scaleType="fitXY"
            android:src="@drawable/a"
            android:tint="#66FF0000"
            />
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:maxHeight="90dp"
            android:minWidth="200dp"
            android:src="@drawable/a"
            android:adjustViewBounds="true"
            />
    
        <ImageSwitcher
            android:id="@+id/imageswitcher"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
    
            />
    
    </LinearLayout>

    java调用代码

    package com.example.myhighuii;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.media.Image;
    import android.os.Bundle;
    import android.view.View;
    import android.view.animation.AnimationUtils;
    import android.widget.ImageSwitcher;
    import android.widget.ImageView;
    import android.widget.ViewSwitcher;
    
    public class MainActivity extends AppCompatActivity {
    
        ImageSwitcher imageSwitcher = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            imageSwitcher = (ImageSwitcher) findViewById(R.id.imageswitcher);
            //淡出效果
            imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(
                    MainActivity.this,android.R.anim.fade_out
            ));
            //渐入效果
            imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(
                    MainActivity.this,android.R.anim.fade_in
            ));
    
            //制定一个输出工厂
            imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
                @Override
                public View makeView() {
                    //为图像切换器指定图像
                    ImageView imageView = new ImageView(MainActivity.this);
                    //为其指定一张默认加载图片
                    imageView.setImageResource(R.drawable.a);
                    return imageView;
                }
            });
    
            //为图像切换器设置监听器
            imageSwitcher.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //参数v就是imageSwitcher
                    ((ImageSwitcher)v).setImageResource(R.drawable.b);
                }
            });
        }
    }

    呈现效果

    多图片的循环切换器实现

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:orientation="vertical">
    
        <ImageSwitcher
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageSwitcher">
        </ImageSwitcher>
    
    </LinearLayout>

    java调用

    package com.example.myhighuiii;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.animation.AnimationUtils;
    import android.widget.ImageSwitcher;
    import android.widget.ImageView;
    import android.widget.ViewSwitcher;
    
    public class MainActivity extends AppCompatActivity {
    
       private int[] arrayPicture = new int[]{
               R.mipmap.a, R.mipmap.b, R.mipmap.c
       };
       private ImageSwitcher imageSwitcher = null;
       private int index = 0;
       private float touchDownX;//手指按下的X坐标
       private float touchUpX;//手指抬起的X坐标
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            imageSwitcher = (ImageSwitcher)findViewById(R.id.imageSwitcher);
            imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
                @Override
                public View makeView() {
                    ImageView imageView = new ImageView(MainActivity.this);
                    imageView.setImageResource(arrayPicture[index]);//当前要显示的图片
                    return imageView;
                }
            });
    
            //设置事件监听器
            imageSwitcher.setOnTouchListener(new View.OnTouchListener(){
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    //如果触发了按下事件
                    if(event.getAction()==MotionEvent.ACTION_DOWN){
                        touchDownX = event.getX();
                        return true;
                    }
                    else if(event.getAction()==MotionEvent.ACTION_UP){//触发了抬起事件
                        touchUpX=event.getX();
                        if(touchUpX-touchDownX>100){//认为是从左向右滑动的,往前走一步
                            index= index==0 ? arrayPicture.length-1 : index-1;
                            //设置淡入淡出
                            imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(
                                    MainActivity.this,android.R.anim.fade_in
                            ));
                            imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(
                                    MainActivity.this,android.R.anim.fade_out
                            ));
                            //设置切换的图片资源
                            imageSwitcher.setImageResource(arrayPicture[index]);
                        }
                        else if(touchUpX-touchDownX<-100){//认为是从右向左滑动的
                            index = index==arrayPicture.length-1 ? 0 : index+1;
                            //设置淡入淡出
                            imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(
                                    MainActivity.this,android.R.anim.fade_in
                            ));
                            imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(
                                    MainActivity.this,android.R.anim.fade_out
                            ));
                            //设置切换的图片资源
                            imageSwitcher.setImageResource(arrayPicture[index]);
                        }
                        return true;
                    }
                    return false;
                }
            });
        }
    }
  • 相关阅读:
    全网最深分析SpringBoot MVC自动配置失效的原因
    这一次搞懂Spring代理创建及AOP链式调用过程
    这一次搞懂SpringBoot核心原理(自动配置、事件驱动、Condition)
    这一次搞懂Spring Web零xml配置原理以及父子容器关系
    这一次搞懂SpringMVC原理
    这一次搞懂Spring事务是如何传播的
    Redis系列(八):发布与订阅
    【深度思考】JDK8中日期类型该如何使用?
    【Redis面试题】如何使用Redis实现微信步数排行榜?
    Nacos系列(一):Nacos环境安装及Hello World示例
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12232620.html
Copyright © 2020-2023  润新知