当前位置: 编程技术>移动开发
本页文章导读:
▪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);//将当前时间线标记在面板上
最新技术文章: