Android 重写Gallery 左对齐

来源:互联网 发布:二宫和也 知乎 编辑:程序博客网 时间:2024/04/30 06:53

修改xml成自定义的HorizontalGallery类:

package com.easyder.gotone.util;import android.R.attr;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Camera;import android.graphics.Matrix;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.view.animation.Transformation;import android.widget.Gallery;public class HorizontalGallery extends Gallery {private Camera mCamera;private int mWidth;private int mPaddingLeft;private boolean flag;private static int firstChildWidth;private static int firstChildPaddingLeft;public HorizontalGallery(Context context) {super(context);mCamera = new Camera();this.setStaticTransformationsEnabled(true);}public HorizontalGallery(Context context, AttributeSet attrs) {super(context, attrs);mCamera = new Camera();// setAttributesValue(context, attrs);this.setStaticTransformationsEnabled(true);}public HorizontalGallery(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);mCamera = new Camera();// setAttributesValue(context, attrs);this.setStaticTransformationsEnabled(true);}private void setAttributesValue(Context context, AttributeSet attrs) {TypedArray typedArray = context.obtainStyledAttributes(attrs, new int[]{attr.paddingLeft});mPaddingLeft = typedArray.getDimensionPixelSize(0, 0);typedArray.recycle();}protected boolean getChildStaticTransformation(View child, Transformation t) {t.clear();t.setTransformationType(Transformation.TYPE_MATRIX);mCamera.save();final Matrix imageMatrix = t.getMatrix();final int imageHeight = child.getLayoutParams().height;final int imageWidth = child.getLayoutParams().width;if (flag) {firstChildWidth = getChildAt(0).getWidth();firstChildPaddingLeft = getChildAt(0).getPaddingLeft();flag = false;}mCamera.translate(firstChildWidth / 2 + firstChildPaddingLeft + mPaddingLeft - mWidth / 2, 0f, 0f);mCamera.getMatrix(imageMatrix);mCamera.restore();return true;}protected void onSizeChanged(int w, int h, int oldw, int oldh) {if (!flag) {mWidth = w;getLayoutParams().width = mWidth;flag = true;}super.onSizeChanged(w, h, oldw, oldh);}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {return false;}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {return super.onScroll(e1, e2, distanceX, distanceY);}}


0 0