Android 图片自动切换

Android 图片自动切换

效果图:

效果图

思路: 利用 android.support.v4.view.ViewPager 和线程实现图片切换。
1. 首先把图片放入分别放入不同的 ImageView
2.然后重写一下 ViewPager 的 适配器 PagerAdapter
3.然后重写一个实现更新界面等操作
4:在onStart里面切换图片


配置文件代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="200dip"
        >

        <android.support.v4.view.ViewPager
            android:id="@+id/vp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="35dip"
            android:orientation="vertical"
            android:layout_gravity="bottom"
            android:gravity="center"
            android:background="#33000000"
            >

            <TextView
                android:id="@+id/tv_test_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="图片标题"
                android:textColor="@android:color/white"
                />

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:layout_marginTop="3dip"
                >

                <View
                    android:id="@+id/dot_0"
                    android:layout_width="5dip"
                    android:layout_height="5dip"
                    android:layout_marginLeft="2dip"
                    android:layout_marginRight="2dip"
                    android:background="@drawable/background"
                    />
                <View
                    android:id="@+id/dot_1"
                    android:layout_width="5dip"
                    android:layout_height="5dip"
                    android:layout_marginLeft="2dip"
                    android:layout_marginRight="2dip"
                    android:background="@drawable/background1"
                    />
                <View
                    android:id="@+id/dot_2"
                    android:layout_width="5dip"
                    android:layout_height="5dip"
                    android:layout_marginLeft="2dip"
                    android:layout_marginRight="2dip"
                    android:background="@drawable/background2"
                    />
                <View
                    android:id="@+id/dot_3"
                    android:layout_width="5dip"
                    android:layout_height="5dip"
                    android:layout_marginLeft="2dip"
                    android:layout_marginRight="2dip"
                    android:background="@drawable/background3"
                    />
                <View
                    android:id="@+id/dot_4"
                    android:layout_width="5dip"
                    android:layout_height="5dip"
                    android:layout_marginLeft="2dip"
                    android:layout_marginRight="2dip"
                    android:background="@drawable/background4"
                    />

            </LinearLayout>


        </LinearLayout>

    </FrameLayout>


</RelativeLayout>

java 文件为:

package androidstudio.android_test_ck;

import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class MainTestActivity extends AppCompatActivity {
    private int imageIds[] = {R.drawable.background, R.drawable.background1, R.drawable.background2, R.drawable.background3, R.drawable.background4};
    private ArrayList<ImageView> images = new ArrayList<>();
    private ViewPager vp;
    private int oldPosition = 0;//记录上一次点的位置
    private int currentItem; //当前页面
    private ScheduledExecutorService scheduledExecutorService;
    //图片标题
    private String titles[] = new String[]{"图片1", "图片2", "图片3", "图片4", "图片5"};
    private ArrayList<View> dots = new ArrayList<View>();;
    private TextView title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_test);

        for (int i = 0; i < imageIds.length; i++) {
            ImageView imageView = new ImageView(this);
            imageView.setImageResource(imageIds[i]);

            images.add(imageView);
        }


        //显示的点 加入集合
        dots.add(findViewById(R.id.dot_0));
        dots.add(findViewById(R.id.dot_1));
        dots.add(findViewById(R.id.dot_2));
        dots.add(findViewById(R.id.dot_3));
        dots.add(findViewById(R.id.dot_4));

        //获取图片标题的id
        title = (TextView) findViewById(R.id.tv_test_title);

         //获取ViewPager 的id
        vp = (ViewPager) findViewById(R.id.vp);
        vp.setAdapter(new ViewPagerAdapter());

        vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
            //设置页面刷新后的图片标题
                title.setText(titles[position]);
                oldPosition = position;
                currentItem = position;
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    class ViewPagerAdapter extends PagerAdapter{

        @Override
        public int getCount() {
            return images.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==object;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
        //将试图移除试图组
            View v =images.get(position);
            container.removeView(v);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            //将试图添加进试图组
            View v =images.get(position);
            container.addView(v);
            return v;
        }

    }

    @Override
    protected void onStart() {
        super.onStart();
        scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        //每隔两秒换一张图片
        scheduledExecutorService.scheduleWithFixedDelay(new ViewPagerTask(),2,2, TimeUnit.SECONDS);

    }
    //实现一个碎片的接口
    class ViewPagerTask implements Runnable{

        @Override
        public void run() {
            currentItem = (currentItem+1)%imageIds.length;
            //更新界面
            handler.obtainMessage().sendToTarget();
        }
    }
    //在handler进行碎片跳转
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
        vp.setCurrentItem(currentItem);
        }
    };
}
  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要实现Android图片自动切换,可以使用ViewPager和Handler结合的方式。首先,将需要自动切换图片放置在ViewPager中,然后使用Handler定时发送消息,每次接收到消息后通过ViewPager的setCurrentItem方法切换到下一张图片即可。 具体实现步骤如下: 1. 在布局文件中添加ViewPager控件,并设置好需要自动切换图片。 2. 在Activity中获取ViewPager控件,并创建一个Handler对象。 3. 在Handler的run方法中,调用ViewPager的setCurrentItem方法切换到下一张图片,并使用postDelayed方法延迟一定时间后再次发送消息,实现自动切换的效果。 下面是代码示例: ```java public class MainActivity extends AppCompatActivity { private ViewPager mViewPager; private Handler mHandler; private int mCurrentItem = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mViewPager = findViewById(R.id.view_pager); MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager()); mViewPager.setAdapter(adapter); mHandler = new Handler(); mHandler.postDelayed(new Runnable() { @Override public void run() { mCurrentItem++; if (mCurrentItem >= adapter.getCount()) { mCurrentItem = 0; } mViewPager.setCurrentItem(mCurrentItem); mHandler.postDelayed(this, 3000); } }, 3000); } @Override protected void onDestroy() { super.onDestroy(); mHandler.removeCallbacksAndMessages(null); } private static class MyPagerAdapter extends FragmentPagerAdapter { private static final int[] IMAGES = {R.drawable.image1, R.drawable.image2, R.drawable.image3}; public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return ImageFragment.newInstance(IMAGES[position]); } @Override public int getCount() { return IMAGES.length; } } public static class ImageFragment extends Fragment { private static final String ARG_IMAGE_RES_ID = "image_res_id"; public static ImageFragment newInstance(int imageResId) { ImageFragment fragment = new ImageFragment(); Bundle args = new Bundle(); args.putInt(ARG_IMAGE_RES_ID, imageResId); fragment.setArguments(args); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_image, container, false); ImageView imageView = view.findViewById(R.id.image_view); int imageResId = getArguments().getInt(ARG_IMAGE_RES_ID); imageView.setImageResource(imageResId); return view; } } } ``` 在上述代码中,我们使用了FragmentPagerAdapter来管理ViewPager中的图片,每个Fragment都显示一个ImageView控件来展示图片。 在Activity的onCreate方法中,我们创建了一个Handler对象,并在其中调用了ViewPager的setCurrentItem方法切换到下一张图片,并使用postDelayed方法延迟3秒后再次发送消息,实现自动切换的效果。在Activity的onDestroy方法中,我们需要调用Handler的removeCallbacksAndMessages方法,确保在Activity销毁时停止自动切换

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值