自定义View(三)——封装自定义View,通过封装类实现文字滚动、画圆
2016-03-12 19:02
393 查看
AndroidManifest.xml
com.cctvjiatao.customview.v4.CustomView1
com.cctvjiatao.customview.v4.CustomView2
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cctvjiatao.customview" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="22" /> <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.customview.MainActivity
package com.cctvjiatao.customview; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }activity_main.xml
<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.cctvjiatao.customview.v1.CustomView1 android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00ff00" android:visibility="gone" > </com.cctvjiatao.customview.v1.CustomView1> <com.cctvjiatao.customview.v2.CustomView1 android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" > </com.cctvjiatao.customview.v2.CustomView1> <com.cctvjiatao.customview.v2.CustomView2 android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" > </com.cctvjiatao.customview.v2.CustomView2> <com.cctvjiatao.customview.v2.CustomView3 android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" > </com.cctvjiatao.customview.v2.CustomView3> <com.cctvjiatao.customview.v3.CustomView1 android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" > </com.cctvjiatao.customview.v3.CustomView1> <com.cctvjiatao.customview.v3.CustomView2 android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone"> </com.cctvjiatao.customview.v3.CustomView2> <com.cctvjiatao.customview.v4.CustomView1 android:layout_width="match_parent" android:layout_height="match_parent" > </com.cctvjiatao.customview.v4.CustomView1> <com.cctvjiatao.customview.v4.CustomView2 android:layout_width="match_parent" android:layout_height="match_parent"> </com.cctvjiatao.customview.v4.CustomView2> </FrameLayout>com.cctvjiatao.customview.v4.BaseView
<pre name="code" class="java">package com.cctvjiatao.customview.v4; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.View; /** * @作者: jiatao * @修改时间:2016-3-12 下午5:30:22 * @包名:com.cctvjiatao.customview.v4 * @文件名:BaseView.java * @版权声明:www.cctvjiatao.com * @功能: 自定义View的封装类 */ public abstract class BaseView extends View { private MyThread thread; private boolean isRunning = true; private long time = 30; public BaseView(Context context) { super(context); } public BaseView(Context context, AttributeSet attrs) { super(context, attrs); } /** * 画空间 */ protected abstract void drawSub(Canvas canvas); /** * 花时间 */ protected abstract void drawLogic(); @Override protected final void onDraw(Canvas canvas) {//增加final限制,不允许子类修改此方法 if(thread == null){ thread = new MyThread(); thread.start(); }else{ drawSub(canvas); } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); isRunning = false; } class MyThread extends Thread{ @Override public void run() { while(isRunning){ drawLogic(); postInvalidate(); try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
com.cctvjiatao.customview.v4.CustomView1
package com.cctvjiatao.customview.v4; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; /** * @作者: jiatao * @修改时间:2016-3-12 下午6:21:38 * @包名:com.cctvjiatao.customview.v4 * @文件名:CustomView1.java * @版权声明:www.cctvjiatao.com * @功能: 通过继承自定义View的封装类来实现文字滚动 */ public class CustomView1 extends BaseView { private float move_x = 0; private Paint paint = new Paint(); public CustomView1(Context context) { super(context); } public CustomView1(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void drawSub(Canvas canvas) { paint.setTextSize(30); canvas.drawText("cctvjiatao", move_x, 30, paint); } @Override protected void drawLogic() { move_x += 3; if (move_x > getWidth()) {//如果文字滑出屏幕 move_x = 0 - paint.measureText("cctvjiatao"); } } }
com.cctvjiatao.customview.v4.CustomView2
package com.cctvjiatao.customview.v4; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; /** * @作者: jiatao * @修改时间:2016-3-12 下午6:45:21 * @包名:com.cctvjiatao.customview.v4 * @文件名:CustomView2.java * @版权声明:www.cctvjiatao.com * @功能: 通过继承自定义的View类实现画圆 */ public class CustomView2 extends BaseView { private RectF rectf = new RectF(100,100,300,300); private Paint paint = new Paint(); private long sweepAngle = 0; public CustomView2(Context context) { super(context); } public CustomView2(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void drawSub(Canvas canvas) { canvas.drawArc(rectf, 0, sweepAngle, true, paint); } @Override protected void drawLogic() { sweepAngle++; if(sweepAngle > 360){ sweepAngle = 0; } } }效果图:
相关文章推荐
- 大疆无人机三种飞行模式
- 学习进度
- mysql数据库连接小笔记----第一个
- hihoCoder #1270 : 建造基地 【dp】
- hihoCoder #1269 : 优化延迟 【二分 + 优先队列】
- hihoCoder #1268 : 九宫 【DFS】
- 第三周项目4:穷举法解决组合问题---换分币
- 工厂设计模式--确定对话框
- nodejs--Nodejs单元测试小结
- 学习进度表01
- myeclipse常用快捷键总结
- linux下安装mysql5.6
- hdoj 1896 Stones 【优先队列】
- 网络与安全方面的最佳开源软件
- hdoj 1716 排列2 【STL】
- java设计模式——结构型之组合模式
- MySQL集群
- 67.迷宫问题(广搜)
- javascript--给你的JS代码添加单元测试
- 小学四则运算题目自动生成