android 自定义view的简单实例
来源:互联网 发布:young网络存在安全隐患 编辑:程序博客网 时间:2024/05/22 06:18
1,提取和封装 使用抽象方法
package com.example.androidmyview.v3;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
public abstract class BaseView extends View {
private mythread thread;
public BaseView(Context context) {
super(context);
}
public BaseView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public BaseView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
if (thread == null) {
thread = new mythread();
thread.start();
}else {
drawsub(canvas);
}
}
/**
* 绘制方法
* @param canvas
*/
protected abstract void drawsub(Canvas canvas);
/**
* 逻辑运算
*/
protected abstract void Logic();
/**
* 自定义线程
* @author Administrator
*
*/
class mythread extends Thread {
@Override
public void run() {
while (true) {
Logic();
//从新绘制
postInvalidate();
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
}
-----------------------------------------------
package com.example.androidmyview.v3;
import java.util.Random;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
public class LogicView extends BaseView{
private Paint paint;
private float x = 0;
private static String text ="LogicView";
private RectF rectf;
private float sweepAngle =0;
private Random random;
public LogicView(Context context) {
super(context);
}
public LogicView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public LogicView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void drawsub(Canvas canvas) {
paint = new Paint();
paint.setTextSize(30);
rectf = new RectF(0,60,100,160);
canvas.drawText(text, x, 30, paint);
canvas.drawArc(rectf, 0, sweepAngle, true, paint);
}
@Override
protected void Logic() {
random = new Random();
x += 3;
if (x>getWidth()) {
x=0-paint.measureText(text);
}
sweepAngle++;
if (sweepAngle>360) {
sweepAngle=0;
}
//产生随机数
int r = random.nextInt(256);
int g = random.nextInt(256);
int b = random.nextInt(256);
//颜色不断变化
paint.setARGB(255, r, g, b);
}
}
---------------------------------------------
布局文件采用framelayout
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<com.example.androidmyview.v1.Myview
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"/>
<com.example.androidmyview.v3.LogicView
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</FrameLayout>
--------------------------------------------------------
使用xml文件解析自定义view
阅读全文
0 0
- android 自定义view的简单实例
- Android自定义简单的View
- Android自定义简单的View
- Android自定义简单的View
- Android自定义View 一<最简单的自定义View>
- android简单自定义view
- Android 简单自定义View
- Android的View 简单理解和实例
- Android的View 简单理解和实例
- 简单举例说明android自定义view的方法
- Android 自定义View -- 简单的倒计时器
- 一个简单的Android自定义view详解
- Android简单自定义view的实现
- android 自定义控件---简单的加载View
- 一个简单的Android自定义View
- Android 实现一个简单的自定义View
- Android 自定义 View 实例 AnalogClock
- android 自定义view 实例CityPickerView
- SSH配置文件
- photoView查看大图,单击退出
- hdu 5120 Intersection (圆面积交)
- GitHub -- Git的导入
- 统计学习方法
- android 自定义view的简单实例
- vmware安装centos7时无法联网问题
- JAVA-toString的用法
- ConcurrentHashMap源码(JDK1.8版)
- C++程序入口
- 三宝
- sdnu1437.圆的面积
- 用通俗易懂的大白话讲解Map/Reduce原理
- 学生成绩录入