当前位置: 编程技术>移动开发
本页文章导读:
▪ProgressBar定做 ProgressBar定制
ProgressBar的基本使用可以参考这个:http://www.eoeandroid.com/thread-1081-1-1.html使用自定义的progressDrawable最终效果:创建一个LayerDrawable:/res/drawable/progress.xml
<layer-list xmlns:android="http:/.........
▪ 关于Gallery的有关问题。无法改变其尺寸大小 关于Gallery的问题。无法改变其尺寸大小
从网上找到一个Gallery的代码,运行后发现,我无法更改其尺寸。布局xml是这样的<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://sch.........
▪ Jfreechart—甘特图下标记当前时间线 Jfreechart—甘特图上标记当前时间线
/********************设置当前时间的标记线***********************/
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
ValueMarker valuemarker = new ValueMarker(.........
[1]ProgressBar定做
来源: 互联网 发布时间: 2014-02-18
ProgressBar定制
ProgressBar的基本使用
可以参考这个:http://www.eoeandroid.com/thread-1081-1-1.html
使用自定义的progressDrawable
最终效果:
创建一个LayerDrawable:/res/drawable/progress.xml
接下来在布局文件的ProgressBar中引用该drawable就ok了,/res/layout/test.xml
ProgressBar的基本使用
可以参考这个:http://www.eoeandroid.com/thread-1081-1-1.html
使用自定义的progressDrawable
最终效果:
创建一个LayerDrawable:/res/drawable/progress.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 背景图片 --> <item android:id="@android:id/background" android:drawable="@drawable/loading_background" /> <!-- 进度图片 --> <item android:id="@android:id/progress"> <clip> <!-- 为了防止bitmap被拉伸,所以没有直接用clip的android:drawable属性--> <bitmap android:src="/blog_article/@drawable/loading_bar/index.html" android:gravity="center" /> </clip> </item> </layer-list>
接下来在布局文件的ProgressBar中引用该drawable就ok了,/res/layout/test.xml
<merge xmlns:android="http://schemas.android.com/apk/res/android"> <ProgressBar android:layout_width="180dp" android:layout_height="40dp" android:max="100" android:progress="80" android:progressDrawable="@drawable/progress" /> </merge>
[2] 关于Gallery的有关问题。无法改变其尺寸大小
来源: 互联网 发布时间: 2014-02-18
关于Gallery的问题。无法改变其尺寸大小
从网上找到一个Gallery的代码,运行后发现,我无法更改其尺寸。
布局xml是这样的
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:background="#0000ff">
<com.gallery.GalleryFlow android:id="@+id/Gallery01"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
当我把android:background改成了蓝色(#0000ff),结果只有一小片区域变成了蓝色,而非整个布局背景变换颜色。先铺出代码,以供参详:
首先是入口Activity代码:
接着是ImageAdapter。
最后是GalleryFlow
从网上找到一个Gallery的代码,运行后发现,我无法更改其尺寸。
布局xml是这样的
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:background="#0000ff">
<com.gallery.GalleryFlow android:id="@+id/Gallery01"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
当我把android:background改成了蓝色(#0000ff),结果只有一小片区域变成了蓝色,而非整个布局背景变换颜色。先铺出代码,以供参详:
首先是入口Activity代码:
public class ActivityMain extends Activity { public void onCreate(Bundle savedInstanceState) { System.out.println("ActivityMain"); super.onCreate(savedInstanceState); setContentView(R.layout.layout_gallery); /* Integer[] images = { R.drawable.img0001, R.drawable.img0030, R.drawable.img0100, R.drawable.img0130, R.drawable.img0200, R.drawable.img0230, R.drawable.img0300, R.drawable.img0330, R.drawable.img0354 };*/ Integer[] images = { R.drawable.ad_up_01, R.drawable.ad_up_02, R.drawable.ad_up_03, R.drawable.ad_up_04, R.drawable.ad_up_05 }; ImageAdapter adapter = new ImageAdapter(this, images); adapter.createReflectedImages(); GalleryFlow galleryFlow = (GalleryFlow) findViewById(R.id.Gallery01); galleryFlow.setAdapter(adapter); } }
接着是ImageAdapter。
public class ImageAdapter extends BaseAdapter { int mGalleryItemBackground; private Context mContext; private Integer[] mImageIds; private ImageView[] mImages; public ImageAdapter(Context c, Integer[] ImageIds) { mContext = c; mImageIds = ImageIds; mImages = new ImageView[mImageIds.length]; } public boolean createReflectedImages() { final int reflectionGap = 4; //倒影间隙 int index = 0; for (int imageId : mImageIds) { Bitmap originalImage = BitmapFactory.decodeResource(mContext .getResources(), imageId); int width = originalImage.getWidth(); int height = originalImage.getHeight(); //实现图片的反转,见Android利用Matrix简单处理图片。 Matrix matrix = new Matrix(); matrix.preScale(1, -1); //创建反转后的图片Bitmap对象,图片高是原图的一半。倒影 Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height / 2, width, height / 3, matrix, false); //创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍。 Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888); //创建画布对象,将原图画于画布,起点是原点位置。 Canvas canvas = new Canvas(bitmapWithReflection); //canvas.clipRect(0, 10, 400, 300); canvas.drawBitmap(originalImage, 0, 0, null); //将反转后的图片画到画布中 Paint deafaultPaint = new Paint(); canvas.drawRect(0, height, width, height + reflectionGap,deafaultPaint); //创建线性渐变LinearGradient 对象。 LinearGradient shader = new LinearGradient(0, originalImage .getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP); canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null); Paint paint = new Paint(); paint.setShader(shader); paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint); ImageView imageView = new ImageView(mContext); imageView.setImageBitmap(bitmapWithReflection); imageView.setLayoutParams(new GalleryFlow.LayoutParams(400, 300)); //imageView.setLayoutParams(new GalleryFlow.LayoutParams(510, 378)); imageView.setScaleType(ScaleType.FIT_XY); mImages[index++] = imageView; } return true; } private Resources getResources() { // TODO Auto-generated method stub return null; } public int getCount() { //return mImageIds.length; return Integer.MAX_VALUE; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { //return mImages[position]; //通过取余来循环取得resIds数组中的图像资源ID return mImages[position % mImages.length]; } /**距离中央距离位移 利用getScale返回View大小*/ public float getScale(boolean focused, int offset) { return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset))); } }
最后是GalleryFlow
public class GalleryFlow extends Gallery { private Camera mCamera = new Camera(); private int mMaxRotationAngle = 60; private int mMaxZoom = -150; //mMaxZoom是图片在Z轴平移的距离,视觉上看上去就是放大缩小的效果 private int mCoveflowCenter; public GalleryFlow(Context context) { super(context); this.setStaticTransformationsEnabled(true); } public GalleryFlow(Context context, AttributeSet attrs) { super(context, attrs); this.setStaticTransformationsEnabled(true); } public GalleryFlow(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.setStaticTransformationsEnabled(true); } /** * Get the max rotational angle of the image * * @return the mMaxRotationAngle */ public int getMaxRotationAngle() { return mMaxRotationAngle; } /** * Set the max rotational angle of each image * * @param maxRotationAngle * the mMaxRotationAngle to set */ public void setMaxRotationAngle(int maxRotationAngle) { mMaxRotationAngle = maxRotationAngle; } /** * Get the Max zoom of the centre image * * @return the mMaxZoom */ public int getMaxZoom() { return mMaxZoom; } /** * Set the max zoom of the centre image * * @param maxZoom * the mMaxZoom to set */ public void setMaxZoom(int maxZoom) { mMaxZoom = maxZoom; } /** * Get the Centre of the Coverflow * * @return The centre of this Coverflow. */ private int getCenterOfCoverflow() { return (getWidth() - getPaddingLeft() - getPaddingRight()) / 2 + getPaddingLeft(); } /** * Get the Centre of the View * * @return The centre of the given view. */ private static int getCenterOfView(View view) { //return view.getLeft() + view.getWidth() / 2; return view.getLeft() + view.getWidth()/2 ; } protected boolean getChildStaticTransformation(View child, Transformation t) { final int childCenter = getCenterOfView(child); final int childWidth = child.getWidth(); int rotationAngle = 0; t.clear(); t.setTransformationType(Transformation.TYPE_MATRIX); if (childCenter == mCoveflowCenter) { transformImageBitmap((ImageView) child, t, 0); } else { rotationAngle = (int) (((float) (mCoveflowCenter - childCenter) / childWidth) * mMaxRotationAngle); if (Math.abs(rotationAngle) > mMaxRotationAngle) { rotationAngle = (rotationAngle < 0) ? -mMaxRotationAngle : mMaxRotationAngle; } transformImageBitmap((ImageView) child, t, rotationAngle); } return true; } /** * This is called during layout when the size of this view has changed. If * you were just added to the view hierarchy, you're called with the old * values of 0. * * @param w * Current width of this view. * @param h * Current height of this view. * @param oldw * Old width of this view. * @param oldh * Old height of this view. */ protected void onSizeChanged(int w, int h, int oldw, int oldh) { mCoveflowCenter = getCenterOfCoverflow(); super.onSizeChanged(w, h, oldw, oldh); System.out.println("w, h, oldw, oldh"); System.out.println(w); System.out.println(h); System.out.println(oldw); System.out.println(oldh); } /** * Transform the Image Bitmap by the Angle passed * * @param imageView * ImageView the ImageView whose bitmap we want to rotate * @param t * transformation * @param rotationAngle * the Angle by which to rotate the Bitmap */ private void transformImageBitmap(ImageView child, Transformation t, int rotationAngle) { mCamera.save(); final Matrix imageMatrix = t.getMatrix(); final int imageHeight = child.getLayoutParams().height; final int imageWidth = child.getLayoutParams().width; final int rotation = Math.abs(rotationAngle); // 在Z轴上正向移动camera的视角,实际效果为放大图片。 // 如果在Y轴上移动,则图片上下移动;X轴上对应图片左右移动。 //mCamera.translate(0.0f, 0.0f, 100.0f); mCamera.translate(0.0f, 0.0f, 130.0f); // As the angle of the view gets less, zoom in if (rotation < mMaxRotationAngle) { float zoomAmount = (float) (mMaxZoom + (rotation * 1.5)); mCamera.translate(0.0f, 0.0f, zoomAmount); } // 在Y轴上旋转,对应图片竖向向里翻转。 // 如果在X轴上旋转,则对应图片横向向里翻转。 //mCamera.rotateY(rotationAngle); mCamera.getMatrix(imageMatrix); /** * 在做任何变换前,先将整个图像从图像的中心点移动到原点((0,0)点), 执行变换完毕后再将图像从原点移动到之前的中心点。 * 如果不加这俩句,任何变换将以图像的原点为变换中心点, 加了之后,任何变换都将以图像的中心点为变换中心点。 */ imageMatrix.preTranslate(-(imageWidth / 2), -(imageHeight / 2)); imageMatrix.postTranslate((imageWidth / 2), (imageHeight / 2)); mCamera.restore(); } }
[3] Jfreechart—甘特图下标记当前时间线
来源: 互联网 发布时间: 2014-02-18
Jfreechart—甘特图上标记当前时间线
/********************设置当前时间的标记线***********************/ DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); ValueMarker valuemarker = new ValueMarker(dateFormat.parse(dateFormat.format(date)).getTime());//设置时间线显示在当日的零点 valuemarker.setLabel(dateFormat.format(date));//当前时间显示标签 valuemarker.setLabelOffsetType(LengthAdjustmentType.NO_CHANGE); valuemarker.setPaint(Color.red); valuemarker.setStroke(new BasicStroke(1.0F)); valuemarker.setLabelFont(new Font("SansSerif", 0, 11)); valuemarker.setLabelPaint(Color.BLUE); valuemarker.setLabelAnchor(RectangleAnchor.LEFT); valuemarker.setLabelTextAnchor(TextAnchor.BOTTOM_LEFT); valuemarker.setLabelOffset(new RectangleInsets(0, 0, 5, 5));//设置时间标签显示的位置 plot.addRangeMarker(valuemarker);//将当前时间线标记在面板上
最新技术文章: