<android.support.v4.view.ViewPager
android:id="@+id/image_slide_page"
android:layout_width="fill_parent"
android:layout_height="180dip"
android:focusable="true" />
/**
* 初始化
*/
private void initeViews(){
// 滑动图片区域
imagePageViews = new ArrayList<View>();
LayoutInflater inflater = getLayoutInflater();
main = (ViewGroup)inflater.inflate(R.layout.page_topic_news, null);
viewPager = (ViewPager) main.findViewById(R.id.image_slide_page);
// 圆点图片区域
parser = new NewsXmlParser();
int length = parser.getSlideImages().length;
imageCircleViews = new ImageView[length];
imageCircleView = (ViewGroup) main.findViewById(R.id.layout_circle_images);
slideLayout = new SlideImageLayout(TopicNews.this);
slideLayout.setCircleImageLayout(length);
for(int i = 0;i < length;i++){
imagePageViews.add(slideLayout.getSlideImageLayout(parser.getSlideImages()[i]));
imageCircleViews[i] = slideLayout.getCircleImageLayout(i);
imageCircleView.addView(slideLayout.getLinearLayout(imageCircleViews[i], 10, 10));
}
// 设置默认的滑动标题
tvSlideTitle = (TextView) main.findViewById(R.id.tvSlideTitle);
tvSlideTitle.setText(parser.getSlideTitles()[0]);
setContentView(main);
// 设置ViewPager
viewPager.setAdapter(new SlideImageAdapter());
viewPager.setOnPageChangeListener(new ImagePageChangeListener());
}
// 滑动图片的集合 private ArrayList<View> imagePageViews = null; private ViewGroup main = null; private ViewPager viewPager = null; // 当前ViewPager索引 private int pageIndex = 0; // 包含圆点图片的View private ViewGroup imageCircleView = null; private ImageView[] imageCircleViews = null; // 滑动标题 private TextView tvSlideTitle = null; // 布局设置类 private SlideImageLayout slideLayout = null; // 数据解析类 private NewsXmlParser parser = null;
package com.image.indicator.parser;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
import com.image.indicator.R;
import com.image.indicator.entity.News;
import com.image.indicator.utility.FileAccess;
/**
* 解析新闻数据列表
* @Description: 解析新闻数据列表,这里只是个示例,具体地不再实现。
* @File: NewsXmlParser.java
* @Package com.image.indicator.parser
* @Author Hanyonglu
* @Date 2012-6-18 下午02:31:26
* @Version V1.0
*/
public class NewsXmlParser {
// 新闻列表
private List<HashMap<String, News>> newsList = null;
// 滑动图片的集合,这里设置成了固定加载,当然也可动态加载。
private int[] slideImages = {
R.drawable.image01,
R.drawable.image02,
R.drawable.image03,
R.drawable.image04,
R.drawable.image05};
// 滑动标题的集合
private int[] slideTitles = {
R.string.title1,
R.string.title2,
R.string.title3,
R.string.title4,
R.string.title5,
};
// 滑动链接的集合
private String[] slideUrls = {
"http://mobile.csdn.net/a/20120616/2806676.html",
"http://cloud.csdn.net/a/20120614/2806646.html",
"http://mobile.csdn.net/a/20120613/2806603.html",
"http://news.csdn.net/a/20120612/2806565.html",
"http://mobile.csdn.net/a/20120615/2806659.html",
};
public int[] getSlideImages(){
return slideImages;
}
public int[] getSlideTitles(){
return slideTitles;
}
public String[] getSlideUrls(){
return slideUrls;
}
/**
* 获取XmlPullParser对象
* @param result
* @return
*/
private XmlPullParser getXmlPullParser(String result){
XmlPullParser parser = Xml.newPullParser();
InputStream inputStream = FileAccess.String2InputStream(result);
try {
parser.setInput(inputStream, "UTF-8");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return parser;
}
public int getNewsListCount(String result){
int count = -1;
try {
XmlPullParser parser = getXmlPullParser(result);
int event = parser.getEventType();//产生第一个事件
while(event != XmlPullParser.END_DOCUMENT){
switch(event){
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG://判断当前事件是否是标签元素开始事件
if("count".equals(parser.getName())){//判断开始标签元素是否是count
count = Integer.parseInt(parser.nextText());
}
break;
case XmlPullParser.END_TAG://判断当前事件是否是标签元素结束事件
// if("count".equals(parser.getName())){//判断开始标签元素是否是count
// count = Integer.parseInt(parser.nextText());
// }
break;
}
event = parser.next();//进入下一个元素并触发相应事件
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
// 无返回值,则返回-1
return count;
}
}
/**
* 生成滑动图片区域布局
* @param index
* @return
*/
public View getSlideImageLayout(int index){
// 包含TextView的LinearLayout
LinearLayout imageLinerLayout = new LinearLayout(activity);
LinearLayout.LayoutParams imageLinerLayoutParames = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT,
1);
ImageView iv = new ImageView(activity);
iv.setBackgroundResource(index);
iv.setOnClickListener(new ImageOnClickListener());
imageLinerLayout.addView(iv,imageLinerLayoutParames);
imageList.add(iv);
return imageLinerLayout;
}
// 滑动页面点击事件监听器
private class ImageOnClickListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(activity, parser.getSlideTitles()[pageIndex], Toast.LENGTH_SHORT).show();
Toast.makeText(activity, parser.getSlideUrls()[pageIndex], Toast.LENGTH_SHORT).show();
}
}
/**
* 生成圆点图片区域布局对象
* @param index
* @return
*/
public ImageView getCircleImageLayout(int index){
imageView = new ImageView(activity);
imageView.setLayoutParams(new LayoutParams(10,10));
imageView.setScaleType(ScaleType.FIT_XY);
imageViews[index] = imageView;
if (index == 0) {
//默认选中第一张图片
imageViews[index].setBackgroundResource(R.drawable.dot_selected);
} else {
imageViews[index].setBackgroundResource(R.drawable.dot_none);
}
return imageViews[index];
}
/**
* 获取LinearLayout
* @param view
* @param width
* @param height
* @return
*/
public View getLinearLayout(View view,int width,int height){
LinearLayout linerLayout = new LinearLayout(activity);
LinearLayout.LayoutParams linerLayoutParames = new LinearLayout.LayoutParams(
width,
height,
1);
// 这里最好也自定义设置,有兴趣的自己设置。
linerLayout.setPadding(10, 0, 10, 0);
linerLayout.addView(view, linerLayoutParames);
return linerLayout;
}
// 滑动图片数据适配器
private class SlideImageAdapter extends PagerAdapter {
@Override
public int getCount() {
return imagePageViews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return super.getItemPosition(object);
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
// TODO Auto-generated method stub
((ViewPager) arg0).removeView(imagePageViews.get(arg1));
}
@Override
public Object instantiateItem(View arg0, int arg1) {
// TODO Auto-generated method stub
((ViewPager) arg0).addView(imagePageViews.get(arg1));
return imagePageViews.get(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
}
@Override
public void finishUpdate(View arg0) {
// TODO Auto-generated method stub
}
}
// 滑动页面更改事件监听器
private class ImagePageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int index) {
pageIndex = index;
slideLayout.setPageIndex(index);
tvSlideTitle.setText(parser.getSlideTitles()[index]);
for (int i = 0; i < imageCircleViews.length; i++) {
imageCircleViews[index].setBackgroundResource(R.drawable.dot_selected);
if (index != i) {
imageCircleViews[i].setBackgroundResource(R.drawable.dot_none);
}
}
}
}
package com.image.indicator.control;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;
/**
* 能够兼容ViewPager的ScrollView
* @Description: 解决了ViewPager在ScrollView中的滑动反弹问题
* @File: ScrollViewExtend.java
* @Package com.image.indicator.control
* @Author Hanyonglu
* @Date 2012-6-18 下午01:34:50
* @Version V1.0
*/
public class ScrollViewExtend extends ScrollView {
// 滑动距离及坐标
private float xDistance, yDistance, xLast, yLast;
public ScrollViewExtend(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = ev.getX();
yLast = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - xLast);
yDistance += Math.abs(curY - yLast);
xLast = curX;
yLast = curY;
if(xDistance > yDistance){
return false;
}
}
return super.onInterceptTouchEvent(ev);
}
}
<com.image.indicator.control.ScrollViewExtend
android:layout_width="match_parent"
android:layout_height="fill_parent">
……
</com.image.indicator.control.ScrollViewExtend>
/**
* 设置图像移动动画效果
* @param v
* @param startX
* @param toX
* @param startY
* @param toY
*/
public static void SetImageSlide(View v, int startX, int toX, int startY, int toY) {
TranslateAnimation anim = new TranslateAnimation(startX, toX, startY, toY);
anim.setDuration(100);
anim.setFillAfter(true);
v.startAnimation(anim);
}
// 新闻分类事件监听器
private class ItemOnclickListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
itemWidth = findViewById(R.id.layout).getWidth();
switch (v.getId()) {
case R.id.tv_title_news:
ImageAnimatioin.SetImageSlide(tvSelectedItem, startX, 0, 0, 0);
startX = 0;
tvSelectedItem.setText(R.string.title_news_category_tops);
// 显示头条信息
intent.setClass(MainActivity.this, TopicNews.class);
vNewsMain = getLocalActivityManager().startActivity(
"TopicNews", intent).getDecorView();
break;
case R.id.tv_title_info:
ImageAnimatioin.SetImageSlide(tvSelectedItem, startX, itemWidth, 0, 0);
startX = itemWidth;
tvSelectedItem.setText(R.string.title_news_category_info);
// 显示资讯信息
intent.setClass(MainActivity.this, InfoNews.class);
vNewsMain = getLocalActivityManager().startActivity(
"InfoNews", intent).getDecorView();
break;
case R.id.tv_title_blog:
ImageAnimatioin.SetImageSlide(tvSelectedItem, startX, itemWidth * 2, 0, 0);
startX = itemWidth * 2;
tvSelectedItem.setText(R.string.title_news_category_blog);
// 显示博客信息
intent.setClass(MainActivity.this, BlogNews.class);
vNewsMain = getLocalActivityManager().startActivity(
"BlogNews", intent).getDecorView();
break;
case R.id.tv_title_magazine:
ImageAnimatioin.SetImageSlide(tvSelectedItem, startX, itemWidth * 3, 0, 0);
startX = itemWidth * 3;
tvSelectedItem.setText(R.string.title_news_category_magazine);
// 显示杂志信息
intent.setClass(MainActivity.this, MagazineNews.class);
vNewsMain = getLocalActivityManager().startActivity(
"MagazineNews", intent).getDecorView();
break;
case R.id.tv_title_domain:
ImageAnimatioin.SetImageSlide(tvSelectedItem, startX, itemWidth * 4, 0, 0);
startX = itemWidth * 4;
tvSelectedItem.setText(R.string.title_news_category_domain);
// 显示业界信息
intent.setClass(MainActivity.this, DomainNews.class);
vNewsMain = getLocalActivityManager().startActivity(
"DomainNews", intent).getDecorView();
break;
case R.id.tv_title_more:
ImageAnimatioin.SetImageSlide(tvSelectedItem, startX, itemWidth * 5, 0, 0);
startX = itemWidth * 5;
tvSelectedItem.setText(R.string.title_news_category_more);
// 显示更多信息
intent.setClass(MainActivity.this, MoreNews.class);
vNewsMain = getLocalActivityManager().startActivity(
"MoreNews", intent).getDecorView();
break;
default:
break;
}
// 更换Layout中的新闻主体
rlNewsMain.removeAllViews();
rlNewsMain.addView(vNewsMain, params);
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有