我想对旋转的子view 添加监听事件。。。求高手帮助!!!!
我在网上找到的一个ViewPager 自动旋转的例子
高仿优酷自动滑动 http://download.csdn.net/detail/t12x3456/4751688
我想给每一个view加上一个监听器。。。我试了很久还是不会。。。
viewPager.setAdapter(new MyAdapter());
viewPager.setOnPageChangeListener(onPageChangeListener);
public class ViewPagerActor extends LinearLayout{
private ViewPager viewPager;
private MyAdapter myAdapter;
private List<View> lists;
public ViewPagerActor(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater =LayoutInflater.from(context);
inflater.inflate(R.drawable.actor_viewpager_layout, this, true);
viewPager = (ViewPager)findViewById(R.id.viewpager);//这个滚动页面
}
public void setDates(List<View> lists){
this.lists = lists;
}
public void initDisplay(){
myAdapter = new MyAdapter(lists);
viewPager.setAdapter(myAdapter);
}
public void notifyDataSetChanged(){
myAdapter.notifyDataSetChanged();
}
/**
* 设置显示第几页
* @param count
*/
public void setCurrentItem(int count){
viewPager.setCurrentItem(count);
}
/**
* 为 viewPager 添加换页监听器
* @param onPageChangeListener
*/
public void setOnPageChangeListener(OnPageChangeListener onPageChangeListener){
viewPager.setOnPageChangeListener(onPageChangeListener);
}
/**
* viewPager 固定的适配器 继承PagerAdapter
* @author Administrator
*
*/
class MyAdapter extends PagerAdapter {
private List<View> views;
public MyAdapter(List<View> lists){
this.views = lists;
}
@Override
public int getCount() {
return views.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
if(views.get(arg1)!=null){
((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);
}
}
}
上面的类你可以保存下来了 那是个通用的滑动切屏
将上面的类 注入到你要运行的activity类的xml中
在activity中
View compassView = makeCompassView();第一个页面
compassView.setOnClickListener(this.addUueeyeListener);//这个就是加监听器
如果你想给这个view中的别的控件加监听一样 直接掉例如
compassView.findViewBy().set监听
View dataView = makeDataView();第二个页面
this.viewDatas.add(compassView);
this.viewDatas.add(dataView);
this.viewPagerActor.setDates(this.viewDatas);赋值给上面滑动中
this.viewPagerActor.initDisplay();//上面有这个方法你自己看
我也不知道这个可以不,网上搜的,你可以试试
我把这个demo修改了一下。。。可以动态添加小点的数目,并且添加了点击事件。。目前点击后会提示点击了哪一个。。。,要的话加我QQ:284176935
你还是给出代码来看吧,,,
demo修改了一下 ,加QQ841143577
不是什么每个view加监听,你把view装进list,list加载到pageAdapter,给viewpager设置监听,监听的就是全部view,要实现这种图片轮播(广告栏效果),就是一句关键代码viewPager.setCurrentItem(msg.arg1);,利用handler和thread,每隔几秒改变item的下标。
viewPager.setAdapter(new MyAdapter());
viewPager.setOnPageChangeListener(onPageChangeListener);
http://download.csdn.net/detail/u013372185/8075709
viewPager.setAdapter(new MyAdapter());
viewPager.setOnPageChangeListener(onPageChangeListener);
viewpager是不是经过inflater绑定的,那么你的布局里面需要存在这个按钮,在inflater之后返回的view中find到这个布局中的button,然后设置点击事件。
这是我的个人笔记,你自己去瞧瞧,也许对你有帮助!
ViewPage来源于android -support.v4
什么是viewPage?
ViewPage 类似于ListView 用于显示多个View集合. 支持页面左右滑动.
如何使用viewPage以及需要注意点?
ViewPage 需要Adapter:
PagerAdapter 有四个重要方法:
(1) void destroyItem(ViewGroup container, int position, Object object): 销毁
(2)Object instantiateItem(ViewGroup container, int position) : 添加View
(3) int getCount() : 获得View总是
(4) boolean isViewFromObject(View view, Object obj) : View比较
监听器: setOnPageChangeListener :页面发生改变
(1) void onPageSelected(int position) :View进行切换 :position 新的页面位置
(2) void onPageScrolled(int arg0, float arg1, int arg2) :页面正在滚动的时候[滑动偏移信息],回调
(3) void onPageScrollStateChanged(int arg0) :页面状态发生变化的时候,回调
ListView 因为使用相同的View,所以采用复用。
而ViewPage ,是基于View ,子类有许多不同,所以要注销.
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
View view= imageVisws.get(position % images.length);
container.removeView(view); // 重复加入会引起异常
container.addView(view);
return view;
导致异常:java.lang.IllegalStateException The specified child already has a parent. You must call removeView()
原因: 被加入的View 有父类, 所以添加到另外一个集合中之前,必须清除父类.
}
uiop123uiop123***[
`
`
]1***
楼主 对每个View加监听在哪个地方加的监听?
viewpager是不是经过inflater绑定的,
那么你的布局里面需要存在这个按钮,
在inflater之后返回的view中find到这个布局中的button,然后设置点击事件。
demo修改了一下 ,加QQ841143577demo修改了一下 ,加QQ841143577
朋友,我想问问你问题解决了没有,我也想实现同样的功能。。。。
public Object instantiateItem(ViewGroup container, final int position)
{
ImageView imageView = new ImageView(getActivity().getApplicationContext());
imageView.setImageBitmap(bitmap[position]);
container.addView(imageView);
mImageViews[position] = imageView;
mImageViews[position].setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
isInternetPresent = cd.isConnectingToInternet();
// TODO Auto-generated method stub
if(isInternetPresent)
{
Intent intent = new Intent();
intent.setClass(getActivity(), WebViewAct.class);
intent.putExtra("url", NewsImage[position][Common.JURL]);
intent.putExtra("key2", NewsImage[position][Common.NAME]);
startActivity(intent);
}
else
{
Toast.makeText(getActivity(), "无网络", Toast.LENGTH_SHORT).show();
}
}
});
return imageView;
}
public Object instantiateItem(ViewGroup container, final int position)
{
ImageView imageView = new ImageView(getActivity().getApplicationContext());
imageView.setImageBitmap(bitmap[position]);
container.addView(imageView);
mImageViews[position] = imageView;
mImageViews[position].setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
isInternetPresent = cd.isConnectingToInternet();
// TODO Auto-generated method stub
if(isInternetPresent)
{
Intent intent = new Intent();
intent.setClass(getActivity(), WebViewAct.class);
intent.putExtra("url", NewsImage[position][Common.JURL]);
intent.putExtra("key2", NewsImage[position][Common.NAME]);
startActivity(intent);
}
else
{
Toast.makeText(getActivity(), "无网络", Toast.LENGTH_SHORT).show();
}
}
});
return imageView;
}