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

时间:2020-11-24 18:11:08

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);
            }
        });
    }
}

呈现效果

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

 

 

 

多图片的循环切换器实现

<?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;
            }
        });
    }
}