自定义view实现无线轮播
来源:互联网 发布:许晴 王雪冰 知乎 编辑:程序博客网 时间:2024/06/05 22:58
public class MainActivity extends AppCompatActivity{
private AutoBanner banner;
private int screenWidth;
private int screenHeight;
List<String> list=new ArrayList<>();
List<String> urllist=new ArrayList<>();
List<Integer> type=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
banner = (AutoBanner) findViewById(R.id.ab);
//创建客户端对象
OkHttpClient client=new OkHttpClient();
//创建请求对象
Request build= new Request.Builder()
.url("http://120.27.23.105/ad/getAd")
.build();
//客户端调用请求对象,执行
client.newCall(build).enqueue(new Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(okhttp3.Call call, Response response) throws IOException {
if(response.isSuccessful()){
String string= null;
try {
string = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
final String finalString = string;
runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson=new Gson();
DataDataBean dataDataBean= gson.fromJson(finalString, DataDataBean.class);
List<DataDataBean.DataBean> data= dataDataBean.getData();
for (DataDataBean.DataBean d :data){
list.add(d.getIcon());
type.add(d.getType());
urllist.add(d.getUrl());
}
banner.setPath(list);
//设置点击事件
banner.setOnClickListener(new Listner() {
@Override
public void onItemClick(int position) {
Integer integer= type.get(position);
if(integer==0){
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
intent.putExtra("url",urllist.get(position));
startActivity(intent);
}else if(integer==1){
Toast.makeText(MainActivity.this,"我要跳转到商品详情页面",Toast.LENGTH_LONG).show();
}
}
});
}
});
}
}
});
}
private ViewPager vp;
private LunAdp adp;
private List<String> path;
private List<ImageView> pointlist = new ArrayList<>();
private View view;
private LinearLayout lin;
private int size;
private int jianju;
private Listner listner;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0) {
vp.setCurrentItem(vp.getCurrentItem() + 1, true);//显示下一条
}
handler.sendEmptyMessageDelayed(0, 2000);//发送延时消息
}
};
public AutoBanner(@NonNull Context context) {
super(context);
init();
}
public AutoBanner(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
size = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto", "size", 6);
jianju = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto", "jianju", 6);
init();
}
public AutoBanner(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
view = View.inflate(getContext(), R.layout.lunbo_layout, this);
vp = (ViewPager) view.findViewById(R.id.vp);
lin = (LinearLayout) view.findViewById(R.id.lin);
}
//设置图片
@SuppressLint("ClickableViewAccessibility")
public void setPath(List<String> path) {
this.path = path;
vp.setAdapter(new LunAdp());//设置适配器
vp.setCurrentItem(path.size() * 100000);//设置当前显示页面
handler.sendEmptyMessageDelayed(0, 2000);//发送延时消息,无限轮播
initpoint();//画出图片变化时的小点点
//设置页面改变事件
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//选中页面时遍历集合,设置当前页面小点点颜色与其他的不同
@Override
public void onPageSelected(int position) {
for (int i = 0; i < pointlist.size(); i++) {
if (i == position % pointlist.size()) {
pointlist.get(i).setImageResource(R.drawable.shap);
} else {
pointlist.get(i).setImageResource(R.drawable.shap1);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
public void initpoint() {
lin.removeAllViews();
for (int i = 0; i < path.size(); i++) {
ImageView image = new ImageView(getContext());
if (i == 0) {
image.setImageResource(R.drawable.shap);
} else {
image.setImageResource(R.drawable.shap1);
}
//添加到集合
pointlist.add(image);
//设置原点边距
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(size, size);
params.setMargins(jianju, 0, jianju, 0);
lin.addView(image, params);
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
public void setJianJu(int jianju) {
this.jianju = jianju;
}
public void setSize(int size) {
this.size = size;
}
public void setOnClickListener(Listner listner) {
this.listner = listner;
}
//内部适配器
class LunAdp extends PagerAdapter {
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
//创建imageview控件
ImageView imageView = new ImageView(getContext());
//给控件设置图片
ImageLoader.getInstance().displayImage(path.get(position % path.size()), imageView, ImageLoaderUtil.getdefaultoption());
container.addView(imageView);//将控件加载视图中
//给viewpager设置触摸事件
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_MOVE:
handler.removeCallbacksAndMessages(null);//鼠标移动时取消发送延迟消息
break;
case MotionEvent.ACTION_CANCEL:
handler.sendEmptyMessageDelayed(1, 2000);
break;
case MotionEvent.ACTION_UP:
handler.sendEmptyMessageDelayed(1, 2000);
break;
case MotionEvent.ACTION_DOWN:
handler.removeCallbacksAndMessages(null);//鼠标按下时取消发送延迟消息
listner.onItemClick(position%path.size());//调用接口,设置点击事件,
break;
}
return true;//自己处理事件
}
});
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
private AutoBanner banner;
private int screenWidth;
private int screenHeight;
List<String> list=new ArrayList<>();
List<String> urllist=new ArrayList<>();
List<Integer> type=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
banner = (AutoBanner) findViewById(R.id.ab);
//创建客户端对象
OkHttpClient client=new OkHttpClient();
//创建请求对象
Request build= new Request.Builder()
.url("http://120.27.23.105/ad/getAd")
.build();
//客户端调用请求对象,执行
client.newCall(build).enqueue(new Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(okhttp3.Call call, Response response) throws IOException {
if(response.isSuccessful()){
String string= null;
try {
string = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
final String finalString = string;
runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson=new Gson();
DataDataBean dataDataBean= gson.fromJson(finalString, DataDataBean.class);
List<DataDataBean.DataBean> data= dataDataBean.getData();
for (DataDataBean.DataBean d :data){
list.add(d.getIcon());
type.add(d.getType());
urllist.add(d.getUrl());
}
banner.setPath(list);
//设置点击事件
banner.setOnClickListener(new Listner() {
@Override
public void onItemClick(int position) {
Integer integer= type.get(position);
if(integer==0){
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
intent.putExtra("url",urllist.get(position));
startActivity(intent);
}else if(integer==1){
Toast.makeText(MainActivity.this,"我要跳转到商品详情页面",Toast.LENGTH_LONG).show();
}
}
});
}
});
}
}
});
}
}
//自定义view
public class AutoBanner extends FrameLayout {private ViewPager vp;
private LunAdp adp;
private List<String> path;
private List<ImageView> pointlist = new ArrayList<>();
private View view;
private LinearLayout lin;
private int size;
private int jianju;
private Listner listner;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0) {
vp.setCurrentItem(vp.getCurrentItem() + 1, true);//显示下一条
}
handler.sendEmptyMessageDelayed(0, 2000);//发送延时消息
}
};
public AutoBanner(@NonNull Context context) {
super(context);
init();
}
public AutoBanner(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
size = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto", "size", 6);
jianju = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto", "jianju", 6);
init();
}
public AutoBanner(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
view = View.inflate(getContext(), R.layout.lunbo_layout, this);
vp = (ViewPager) view.findViewById(R.id.vp);
lin = (LinearLayout) view.findViewById(R.id.lin);
}
//设置图片
@SuppressLint("ClickableViewAccessibility")
public void setPath(List<String> path) {
this.path = path;
vp.setAdapter(new LunAdp());//设置适配器
vp.setCurrentItem(path.size() * 100000);//设置当前显示页面
handler.sendEmptyMessageDelayed(0, 2000);//发送延时消息,无限轮播
initpoint();//画出图片变化时的小点点
//设置页面改变事件
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//选中页面时遍历集合,设置当前页面小点点颜色与其他的不同
@Override
public void onPageSelected(int position) {
for (int i = 0; i < pointlist.size(); i++) {
if (i == position % pointlist.size()) {
pointlist.get(i).setImageResource(R.drawable.shap);
} else {
pointlist.get(i).setImageResource(R.drawable.shap1);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
public void initpoint() {
lin.removeAllViews();
for (int i = 0; i < path.size(); i++) {
ImageView image = new ImageView(getContext());
if (i == 0) {
image.setImageResource(R.drawable.shap);
} else {
image.setImageResource(R.drawable.shap1);
}
//添加到集合
pointlist.add(image);
//设置原点边距
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(size, size);
params.setMargins(jianju, 0, jianju, 0);
lin.addView(image, params);
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
public void setJianJu(int jianju) {
this.jianju = jianju;
}
public void setSize(int size) {
this.size = size;
}
public void setOnClickListener(Listner listner) {
this.listner = listner;
}
//内部适配器
class LunAdp extends PagerAdapter {
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
//创建imageview控件
ImageView imageView = new ImageView(getContext());
//给控件设置图片
ImageLoader.getInstance().displayImage(path.get(position % path.size()), imageView, ImageLoaderUtil.getdefaultoption());
container.addView(imageView);//将控件加载视图中
//给viewpager设置触摸事件
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_MOVE:
handler.removeCallbacksAndMessages(null);//鼠标移动时取消发送延迟消息
break;
case MotionEvent.ACTION_CANCEL:
handler.sendEmptyMessageDelayed(1, 2000);
break;
case MotionEvent.ACTION_UP:
handler.sendEmptyMessageDelayed(1, 2000);
break;
case MotionEvent.ACTION_DOWN:
handler.removeCallbacksAndMessages(null);//鼠标按下时取消发送延迟消息
listner.onItemClick(position%path.size());//调用接口,设置点击事件,
break;
}
return true;//自己处理事件
}
});
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
//自定义接口
public interface Listner {
void onItemClick(int position);
}
阅读全文
0 0
- 自定义view实现无线轮播
- 自定义view无线轮播点击跳转
- 自定义view实现无限轮播
- 自定义view轮播
- 自定义View 轮播
- ViewPager_实现无线轮播
- 网络实现无线轮播
- banner实现无线轮播
- 自定义View之无限轮播Banner的实现:STBanner
- 自定义View之无限轮播Banner的实现:STBanner
- Android自定义View实现文本轮播效果
- 安卓实现汉字轮播(自定义view)
- iOS 使用collectionView实现无线轮播
- ConvenientBanner无线轮播 实现广告条
- banner实现广告的无线轮播
- 自定义View——循环轮播View
- Android开发之ViewPager实现轮播图(轮播广告)效果的自定义View
- Android之ViewPager实现轮播广告效果的自定义View
- Java转Python入门之运算与循环
- MongoDB的使用
- 继承ViewGroup
- LeetCode 477. Total Hamming Distance
- SAP Fiori For iOS
- 自定义view实现无线轮播
- webview
- ShoneSharp语言(S#)的设计和使用介绍系列(4)— 入门概述
- 状压dp Survival
- 通过当前时间获取当前所在周的7天的时间
- Hive的数据模型之视图
- IIS发布网站后出现“处理程序"PageHandlerFactory-Integrated"在其模块列表中有一个错误模块”的解决方法
- 数组逆序功能
- 【Java】学年学期