android广告自动滚动并用picasso实现图片加载
picasso实现图片加载,参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0731/1639.html
这里只是简单的讲这里面的使用,
先:把picasso的jar包下载下来导入工程中,
然后:在需要使用的地方写代码:Picasso.with(context).load(path).placeholder(R.id.xxx).error(R.id.xxx).into(ImageView);
注:context是一个Activity上下文对象,
load(path)里面传入的是需要下载的网上的图片路径,也可以传其他的,比如uri,file什么的,
placeholder()里面传入的是如果图片没有加载出来(加载需要时间,当前时间加载不出来的时候)显示的图片,可以传资源id,也可以传Drawable对象
error()是出现错误的时候显示的图片
into()是表示前面加载的图片显示在哪一个控件上,比如ImageView
android实现广告自动滚动:
广告要显示的地方定义一个相对布局包含一个ViewPager,然后把单选按钮放在相对布局的右下角(自己想要的位置,多半在右下角)
代码:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="200dp" android:background="#696969"/> <RadioGroup android:id="@+id/RadioGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/viewpager" android:layout_alignParentRight="true" android:layout_marginBottom="5dp" android:orientation="horizontal" > <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@null" android:checked="true" android:drawableLeft="@drawable/radiobutton_selector" android:padding="2dp" /> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@null" android:drawableLeft="@drawable/radiobutton_selector" android:padding="2dp" /> <RadioButton android:id="@+id/radio3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@null" android:drawableLeft="@drawable/radiobutton_selector" android:padding="2dp" /> <RadioButton android:id="@+id/radio4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@null" android:drawableLeft="@drawable/radiobutton_selector" android:padding="2dp" /> </RadioGroup></RelativeLayout>
为ViewPager添加Adapter------ ViewPagerAdapter.java
public class ViewPagerAdapter extends PagerAdapter {//界面列表 private List<View> views; public ViewPagerAdapter (List<View> views){ this.views = views; } @Override public int getCount() { return views==null?0:views.size(); } @Override public void finishUpdate(View arg0) { // TODO Auto-generated method stub } @Override public void destroyItem(View arg0, int arg1, Object arg2) { ((ViewPager)arg0).removeView(views.get(arg1)); } @Override public Object instantiateItem(View arg0, int arg1) { ((ViewPager)arg0).addView(views.get(arg1), 0); return views.get(arg1); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return (arg0 == arg1); } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { // TODO Auto-generated method stub } @Override public Parcelable saveState() { // TODO Auto-generated method stub return null; } @Override public void startUpdate(View arg0) { // TODO Auto-generated method stub } }
在Activity中实现ViewPager的左右滑动切换图片和单选按钮点击,让ViewPager显示点击的页面,这个在之前的博客(引导页面)讲过,这里不细说,直说核心的代码,及怎么去实现自动滚动
(1)定义一个全局变量:private int currentItem; // 当前页面
(这是为了记录当前页面,这样自动播放的时候才会知道该播放显示那一个,所以单选按钮切换的时候viewpager.setCurrentItem(x);更改当前页面的currentItem 值:currentItem = x,滑动改变页面的时候也要写:currentItem = position;)
(2)自动滚动肯定要开线程,线程做的就是停一点时间(比如2秒),完了之后告诉Holder去改变显示的页面:
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
// 设置当前页面
vp.setCurrentItem(currentItem);
};
};
(3)线程写在onStart()里面:
这就能实现图片像广告一样自动播放,同时也可以点击进选择,也可以滑动选择
如果要实现加载网络上的图片,在给adapter需要的list赋值的时候,选择加载网络图片就可以了
//图片path
private static final String[] picPath = { "http://img.sccnn.com/bimg/337/9373.jpg",
"http://img.sccnn.com/bimg/311/011.jpg", "http://img.hexun.com/2011-06-07/130316357.jpg",
"http://down1.sucaitianxia.com/psd02/psd158/psds27988.jpg" };
for (int i = 0; i < picPath.length; i++) {
ImageView iv = new ImageView(this);
iv.setLayoutParams(mParams);
Picasso.with(this).load(picPath[i]).into(iv);//用picasso加载图片
iv.setScaleType(ScaleType.FIT_XY);
views.add(iv);
}
MainActivity.java
package com.example.myad;import java.util.ArrayList;import java.util.List;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;import com.squareup.picasso.Picasso;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.ImageView.ScaleType;import android.widget.RadioGroup.OnCheckedChangeListener;public class MainActivity extends Activity {private ViewPager vp;private ViewPagerAdapter vpAdapter;private List<View> views;private RadioGroup group;private RadioButton radioButton;private int currentItem; // 当前页面private ScheduledExecutorService scheduledExecutorService;private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {// 设置当前页面vp.setCurrentItem(currentItem);};};private static final int[] pics = { R.drawable.self_update_banner, R.drawable.connection_login_header,R.drawable.self_update_banner, R.drawable.connection_login_header };private static final String[] picPath = { "http://img.sccnn.com/bimg/337/9373.jpg","http://img.sccnn.com/bimg/311/011.jpg", "http://img.hexun.com/2011-06-07/130316357.jpg","http://down1.sucaitianxia.com/psd02/psd158/psds27988.jpg" };@Overrideprotected void onStart() {super.onStart();scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();// 每隔2秒钟切换一张图片scheduledExecutorService.scheduleWithFixedDelay(new ViewPagerTask(), 2, 2, TimeUnit.SECONDS);// scheduleAtFixedRate(command, initialDelay, period, unit);// command:执行线程 initialDelay:初始化延时 period:前一次执行结束到下一次执行开始的间隔时间(间隔执行延迟时间)// unit:计时单位}// 切换图片private class ViewPagerTask implements Runnable {@Overridepublic void run() {currentItem = (currentItem + 1) % pics.length;// 更新界面handler.obtainMessage().sendToTarget();// message对象sendToTarget(),handler对象sendMessage();}}@SuppressWarnings("deprecation")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);vp = (ViewPager) findViewById(R.id.viewpager);group = (RadioGroup) findViewById(R.id.RadioGroup);group.setOnCheckedChangeListener(listener);views = new ArrayList<View>();LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);for (int i = 0; i < picPath.length; i++) {ImageView iv = new ImageView(this);iv.setLayoutParams(mParams);Picasso.with(this).load(picPath[i]).error(pics[i]).into(iv);iv.setScaleType(ScaleType.FIT_XY);views.add(iv);}vpAdapter = new ViewPagerAdapter(views);vp.setAdapter(vpAdapter);vp.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {radioButton = (RadioButton) group.getChildAt(position);radioButton.setChecked(true);currentItem = position;}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}});}OnCheckedChangeListener listener = new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkId) {switch (checkId) {case R.id.radio1:vp.setCurrentItem(0);currentItem = 0;break;case R.id.radio2:vp.setCurrentItem(1);currentItem = 1;break;case R.id.radio3:vp.setCurrentItem(2);currentItem = 2;break;case R.id.radio4:vp.setCurrentItem(3);currentItem = 3;break;default:break;}}};}
源代码:http://download.csdn.net/detail/qq_30716173/9273873
更多相关文章
- Android(安卓)Studio图片框
- Android(安卓)异步加载图片-AsyncTask
- Android(安卓)开机图片/文字/动画 修改
- 蒙板引导页面
- Android中TextView显示插入的图片实现方法
- Android实现js及webview交互之在html页面中调用系统摄像头
- Android实现BMP和PNG转换为JPEG格式
- android 获取相册图片及路径
- android加载大量图片内存溢出bitmap size exceeds VM budget的解