自定义View实例——下雨天画面
来源:互联网 发布:win10软件分辨率不正常 编辑:程序博客网 时间:2024/04/28 05:11
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cctvjiatao.rainview" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>com.cctvjiatao.rainview.MainActivity
package com.cctvjiatao.rainview;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.cctvjiatao.rainview.MainActivity" > <com.cctvjiatao.rainview.v2.ManyRain android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#000000"/></RelativeLayout>com.cctvjiatao.rainview.v2.BaseView
<pre name="code" class="java">package com.cctvjiatao.rainview.v2;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.View;/** * @作者: jiatao * @修改时间:2016-3-13 下午12:23:39 * @包名:com.cctvjiatao.rainview.v2 * @文件名:BaseView.java * @版权声明:www.cctvjiatao.com * @功能: 自定义View的封装类 */public abstract class BaseView extends View {private DrawThread thread;private boolean isRunning = true;private long sleepTime = 30;public BaseView(Context context, AttributeSet attrs) {super(context, attrs);}public BaseView(Context context) {super(context);}protected abstract void drawSub(Canvas canvas);protected abstract void drawLogic();protected abstract void init();@Overrideprotected final void onDraw(Canvas canvas) {if (thread == null) {thread = new DrawThread();thread.start();} else {drawSub(canvas);}}@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();isRunning = false;}class DrawThread extends Thread {@Overridepublic void run() {init();while (isRunning) {drawLogic();postInvalidate();try {Thread.sleep(sleepTime);} catch (InterruptedException e) {e.printStackTrace();}}}}}
com.cctvjiatao.rainview.v2.RainItem
</pre><pre name="code" class="java">package com.cctvjiatao.rainview.v2;import java.util.Random;import android.graphics.Canvas;import android.graphics.Paint;/** * @作者: jiatao * @修改时间:2016-3-13 下午12:33:39 * @包名:com.cctvjiatao.rainview.v2 * @文件名:RainItem.java * @版权声明:www.cctvjiatao.com * @功能: 雨滴的封装类 */public class RainItem {private int width, height;private float startX, startY, stopX, stopY, sizeX, sizeY;private float speed;// 可控制速度private Random random;private Paint paint = new Paint();private int size = 20;private int color ;private boolean randColor = false;;public RainItem(int width, int height) {this.width = width;this.height = height;init();}public RainItem(int width, int height, int size) {this.size = size;this.width = width;this.height = height;init();}public RainItem(int width, int height, int size, int color) {this.color = color;this.size = size;this.width = width;this.height = height;init();}public RainItem(int width, int height, int size, int color, boolean randColor) {this.randColor = randColor;this.color = color;this.size = size;this.width = width;this.height = height;init();}public RainItem(int width, int height, int size, int color, boolean randColor, float speed) {this.randColor = randColor;this.color = color;this.size = size;this.speed = speed;this.width = width;this.height = height;init();}private void init() {random = new Random();sizeX = 1 + random.nextInt(size / 2);sizeY = 10 + random.nextInt(size);startX = random.nextInt(width);startY = random.nextInt(height);stopX = startX + sizeX;stopY = startY + sizeY;speed = 0.2f + random.nextFloat();paint = new Paint();if (randColor) {int r = random.nextInt(256);int g = random.nextInt(256);int b = random.nextInt(256);paint.setARGB(255, r, g, b);} else {paint.setColor(color);}}public void draw(Canvas canvas) {canvas.drawLine(startX, startY, stopX, stopY, paint);}public void move() {startX += sizeX * speed;stopX += sizeX * speed;startY += sizeY * speed;stopY += sizeY * speed;if (startY > height) {init();}}}com.cctvjiatao.rainview.v2.ManyRain
package com.cctvjiatao.rainview.v2;import java.util.ArrayList;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;/** * @作者: jiatao * @修改时间:2016-3-13 下午12:33:39 * @包名:com.cctvjiatao.rainview.v2 * @文件名:ManyRain.java * @版权声明:www.cctvjiatao.com * @功能: 下雨的执行类 */public class ManyRain extends BaseView{private ArrayList<RainItem> list = new ArrayList<RainItem>();private int rainNum = 80;//雨滴的数量private int size = 20;//移动的距离private int rainColor = 0xffffffff;//画笔的初始颜色private boolean randColor = true; //是否变色public ManyRain(Context context, AttributeSet attrs) {super(context, attrs);}public ManyRain(Context context) {super(context);}@Overrideprotected void drawSub(Canvas canvas) {for(RainItem item: list){item.draw(canvas);}}@Overrideprotected void drawLogic() {for(RainItem item: list){item.move();}}@Overrideprotected void init() {for(int i = 0; i < rainNum; i ++){RainItem item = new RainItem(getWidth(), getHeight(), size, rainColor, randColor);list.add(item);}}}
0 0
- 自定义View实例——下雨天画面
- 自定义View实例——下雨天画面(通过布局文件.xml中的自定义属性来设值)
- 自定义View实例——雨滴落下
- Android 自定义View——表盘实例
- iphone自定义view画面(绘画)
- 下雨天。。。
- 下雨天
- 下雨天
- 下雨天
- 下雨天
- 下雨天
- 下雨天
- 下雨天
- 下雨天
- Android 自定义View 入门——FlowLayout实例(流布局)
- 科普——下雨天为什么是乌云,晴天是白云
- Android—自定义view
- Android自定义view,实现多画面播放器
- 关于闭包的理解
- Android面试题
- 系统参数的最小二乘法估计
- 多线程 : 多线程共享局部变量的方法
- 检查iOS项目中是否使用了IDFA
- 自定义View实例——下雨天画面
- 单目相机标定
- AIDL之android接口语言第一篇通信
- java 定时任务 3种
- tabhost 通过popup跳转activity
- 一、冒泡排序
- Javascript中的function函数
- 界面传值
- HDU3549 Flow Problem(最大流)