自定义view—— 广告条效果
来源:互联网 发布:淘宝退货怎么说 编辑:程序博客网 时间:2024/06/05 07:18
效果图
布局activi_mian:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width= "fill_parent"
android:layout_height= "150dp" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</android.support.v4.view.ViewPager >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#44000000"
android:orientation="vertical"
android:layout_alignParentBottom ="true"
android:padding="5dp" >
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="广告条效果"
android:padding="5dp"
android:textColor="#ffffffff" />
<LinearLayout
android:id="@+id/ll_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center" >
</LinearLayout>
</LinearLayout >
</RelativeLayout>
被选中的时候按钮:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="8dp"
android:height="8dp" />
<solid android:color="#ff0000"/>
</shape>
正常情况下圆点:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="8dp"
android:height="8dp" />
<solid android:color="#44000000"/>
</shape>
MainActivity主界面功能:
/**
* 广告条效果
*
* @author 周成东
*
*/
public class MainActivity extends Activity {
private ViewPager pager;
private TextView tv_title;
private LinearLayout ll_point;
private int[] ids = { R.drawable.a, R.drawable.b, R.drawable.c,
R.drawable. d, R.drawable. e };
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what ) {
case 0:
int item = pager.getCurrentItem() + 1;
pager.setCurrentItem(item);
handler.sendEmptyMessageDelayed(0, 3000);
break;
default:
break;
}
};
};
/**
* 上一次高亮显示的位置
*/
private int prePosition = 0;
private List<ImageView> imageViews = new ArrayList<ImageView>();
// 图片标题集合
private final String[] imageDescriptions = { "尚硅谷波河争霸赛!" , "凝聚你我,放飞梦想!" ,
"抱歉没座位了!" , "7月就业名单全部曝光!" , "平均起薪11345元" };
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
initView();
getData();
setListener();
pager.setAdapter( new PagerAdapter() {
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return Integer.MAX_VALUE ;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
final int relposition = position % imageViews.size();
final ImageView imageView = imageViews.get(relposition);
container.addView(imageView);
// imageview 触摸事件
imageView.setOnTouchListener( new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// 不会调用MotionEvent.ACTION_MOVE
if (event.getAction() == MotionEvent.ACTION_DOWN ) {
handler.removeCallbacksAndMessages( null);
} else if (event.getAction() == MotionEvent.ACTION_UP ) {
handler.removeCallbacksAndMessages( null);
handler.sendEmptyMessageDelayed(0, 3000);
}
return false ;
}
});
//就是当多个ImageView用到一个监听器时,能触发不同的情况
imageView.setTag(relposition);
imageView.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
int position=(Integer) imageView.getTag();
String text=imageDescriptions[position];
Toast. makeText(getApplicationContext(), text, Toast.LENGTH_LONG ).show();
}
});
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
container.removeView((View) object);
}
});
// 设置中间位置
int item = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2
% imageViews.size();
pager.setCurrentItem(item);
handler.sendEmptyMessageDelayed(0, 3000);
}
private void setListener() {
pager.setOnPageChangeListener( new OnPageChangeListener() {
private boolean isDragging ;
@Override
public void onPageSelected(int position) {
//进行循环,真实的位置
int relposition = position % imageViews.size();
tv_title.setText( imageDescriptions[relposition]);
// 设置前一个为灰点
ll_point.getChildAt( prePosition).setEnabled(false);
ll_point.getChildAt(relposition).setEnabled( true);
prePosition = relposition;
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_DRAGGING ) {
handler.removeCallbacksAndMessages( null);
isDragging = true ;
} else if (state == ViewPager.SCROLL_STATE_SETTLING ) {
} else if (state == ViewPager.SCROLL_STATE_IDLE && isDragging) {
isDragging = false ;
handler.removeCallbacksAndMessages( null);
handler.sendEmptyMessageDelayed(0, 3000);
}
}
});
}
private void getData() {
for (int i = 0; i < ids.length; i++) {
/**
* 设置图片
*/
ImageView imageView = new ImageView(this);
imageView.setBackgroundResource( ids[i]);
imageViews.add(imageView);
/**
* 获取点
*/
ImageView point = new ImageView(this);
point.setBackgroundResource(R.drawable. point_selector);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8,
8);
if (i == 0) {
point.setEnabled( true);
} else {
point.setEnabled( false);
params. leftMargin = 8;
}
point.setLayoutParams(params);
ll_point.addView(point);
}
}
private void initView() {
pager = (ViewPager) findViewById(R.id.viewpager );
tv_title = (TextView) findViewById(R.id.tv_title );
ll_point = (LinearLayout) findViewById(R.id.ll_point );
}
}
- 自定义view—— 广告条效果
- 自定义View系列之ViewPager实现广告条效果
- 自定义View----Banner广告条
- Android自定义View——仿1号店垂直滚动广告条实现
- Android自定义View——仿1号店垂直滚动广告条实现
- Android滚动条广告,可以设置自定义view的ViewSwitcher
- 自定义控件:使用ViewPager实现广告条效果
- 广告View效果学习
- 自定义View——天气下雨效果
- Android——自定义View loading效果
- Android自定义View——刮刮卡效果
- 自定义广告Banner条
- 广告条文字翻滚效果
- jQuery 实现广告条效果
- android自定义View——等级滑动条
- 新闻条、广告条滚动效果
- Android从零开搞系列:自定义View(11)使用ViewPager打造轮播广告条
- 自定义View一仿宝头条1号店京东垂直滚动的公告(广告)条
- 频率就是1K振荡电路
- retrofit2.0使用拦截器Interceptor统一打印请求与响应的json
- python求解最大子序列问题,子序列可连续或不连续
- asp.net mvc当出现错误时如何实现友好错误提示
- Nmon的安装及使用
- 自定义view—— 广告条效果
- [色彩]迅速判断16进制颜色值呈色
- IOS swift3 国际化时NSLocalizedString获取总是返回id
- 在安卓中使用正则表达式1
- LSA与其配置命令
- 深度 | TensorFlow开源一周年:这可能是一份最完整的盘点
- 黑马day14 过滤器之解决所有乱码
- qt4->qt5的相关问题
- SSH authorized_keys 无效问题