首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

FlowIndicator 自定义上下图片切换

2013-11-08 
FlowIndicator 自定义左右图片切换?二、布局文件header_view.xml?xml version1.0 encodingutf-8?F

FlowIndicator 自定义左右图片切换

?二、布局文件

header_view.xml

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app1="http://schemas.android.com/apk/res/com.johnny.flowindicatortest"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:orientation="vertical" >    <Gallery        android:id="@+id/home_gallery"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:spacing="5dp" />    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_gravity="bottom"        android:background="#65000000"        android:orientation="vertical" >        <TextView            android:id="@+id/tv_gal_title"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:layout_marginBottom="5dp"            android:layout_marginTop="5dp"            android:textColor="#ffffff"            android:textSize="18sp" />        <com.johnny.flowindicatortest.FlowIndicator            android:id="@+id/myview"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_marginBottom="5dip"            android:gravity="center"            app:count="4"            app:point_normal_color="#45000000"            app:point_radius="3dip"            app:point_seleted_color="#ffffff"            app:point_size="5dip"            app:space="10dp" />    </LinearLayout></FrameLayout>

gallery_item.xml

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <ImageView        android:id="@+id/home_img"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:adjustViewBounds="true"        android:src="@drawable/t1" /></FrameLayout>

?

一个资源文件attrs.xml
<?xml version="1.0" encoding="utf-8"?><resources>        <declare-styleable name="FlowIndicator">        <attr name="count" format="integer" />        <attr name="space" format="dimension" />        <attr name="point_size" format="dimension" />        <attr name="point_seleted_color" format="color|reference" />        <attr name="point_normal_color" format="color|reference" />        <attr name="point_radius" format="dimension" />    </declare-styleable></resources>
?FlowIndicator.java
public class FlowIndicator extends View {private int count;private float space, radius;private int point_normal_color, point_seleted_color;// 选中private int seleted = 0;public FlowIndicator(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub//提供TypedArray(用于Drawable对象数组)的XML资源。TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.FlowIndicator);count = typedArray.getInteger(R.styleable.FlowIndicator_count,4);space = typedArray.getDimension(R.styleable.FlowIndicator_space, 9);radius = typedArray.getDimension(R.styleable.FlowIndicator_point_radius, 9);point_normal_color = typedArray.getColor(R.styleable.FlowIndicator_point_normal_color, 0x000000);point_seleted_color = typedArray.getColor(R.styleable.FlowIndicator_point_seleted_color, 0xffff07);int sum = attrs.getAttributeCount();if(Constans.DEBUG){String str = "";for(int i=0;i<sum;i++){String name = attrs.getAttributeName(i);String value = attrs.getAttributeValue(i);str += "sttr_name:" + name +": " + value +"\n";}Log.i("attribute", str);}typedArray.recycle();}public void setSeletion(int index){this.seleted = index;//重绘invalidate();}public void setCount(int count){this.count = count;invalidate();}public void next(){if(seleted < count-1){seleted++;}else{seleted = 0;}invalidate();}public void previous(){if(seleted > 0 ){seleted--;}else{seleted = count-1;}invalidate();}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);Paint paint = new Paint();paint.setAntiAlias(true);float width = (getWidth() - ((radius * 2 * count) + (space * (count - 1))))/2.f;for (int i = 0; i < count; i++) {if (i == seleted)paint.setColor(point_seleted_color);elsepaint.setColor(point_normal_color);canvas.drawCircle(width + getPaddingLeft() + radius + i* (space + radius + radius), getHeight() / 2, radius, paint);}}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(measureWidth(widthMeasureSpec),measureHeight(heightMeasureSpec));}private int measureWidth(int measureSpec) {int result = 0;int specMode = MeasureSpec.getMode(measureSpec);int specSize = MeasureSpec.getSize(measureSpec);if (specMode == MeasureSpec.EXACTLY) {result = specSize;} else {result = (int) (getPaddingLeft() + getPaddingRight()+ (count * 2 * radius) + (count - 1) * radius + 1);if (specMode == MeasureSpec.AT_MOST) {result = Math.min(result, specSize);}}return result;}private int measureHeight(int measureSpec) {int result = 0;int specMode = MeasureSpec.getMode(measureSpec);int specSize = MeasureSpec.getSize(measureSpec);if (specMode == MeasureSpec.EXACTLY) {result = specSize;} else {result = (int) (2 * radius + getPaddingTop() + getPaddingBottom() + 1);if (specMode == MeasureSpec.AT_MOST) {result = Math.min(result, specSize);}}return result;}}
?MainActivity.java
public class MainActivity extends Activity {private static final int SCROLL_ACTION = 0;private TextView textView;private Gallery mGallery;private FlowIndicator myView;Timer mTimer;private GalleryAdapter galleryAdapter;private String[] titles = {"标题1","标题2","标题3","标题4","标题5","标题6","标题7","标题8","标题9"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.header_view);viewInit();//定时滚动mTimer = new Timer();mTimer.scheduleAtFixedRate(new MyTask(), 0, 5000);}private void viewInit(){textView = (TextView) findViewById(R.id.tv_gal_title);mGallery = (Gallery) findViewById(R.id.home_gallery);myView = (FlowIndicator) findViewById(R.id.myview);galleryAdapter = new GalleryAdapter(this);myView.setCount(galleryAdapter.getCount());mGallery.setAdapter(galleryAdapter);mGallery.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {// TODO Auto-generated method stubtextView.setText(titles[arg2]);myView.setSeletion(arg2);}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {// TODO Auto-generated method stub}});}private class GalleryAdapter extends BaseAdapter{Context mContext;int[] res = new int[] { R.drawable.t1, R.drawable.t2,R.drawable.t3, R.drawable.t1, R.drawable.t2,R.drawable.t3, R.drawable.t1, R.drawable.t2,R.drawable.t3 };public GalleryAdapter(Context cnt) {this.mContext = cnt;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn res.length;}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn res[arg0];}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubif(convertView == null){convertView = LayoutInflater.from(mContext).inflate(R.layout.gallery_item, null);}ImageView imageView = (ImageView) convertView.findViewById(R.id.home_img);imageView.setImageResource(res[position]);return convertView;}}private class MyTask extends TimerTask {@Overridepublic void run() {mHandler.sendEmptyMessage(SCROLL_ACTION);}}Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);switch (msg.what) {case SCROLL_ACTION:MotionEvent e1 = MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN,89.333336f, 265.33334f, 0);MotionEvent e2 = MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP,300.0f, 238.00003f, 0);mGallery.onFling(e1, e2, -1300, 0);break;default:break;}}};}
?Constans.java
public class Constans {public static boolean DEBUG = true;}
?

热点排行