android 自定义View设置自定义监听 框架(监听自定义字符)
来源:互联网 发布:淘宝最帅男模特 编辑:程序博客网 时间:2024/06/11 15:45
第一步: 复写onDraw方法,在方法中画出我们的视图(字符串为例)
@Override
/**
@Override
public class MainActivity extends Activity implements PercentListener{
package com.example.androidtest.activity.view;
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint = new Paint();
// 填充消除据此
paint.setStyle(Paint.Style.FILL);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
String string = "画字符串";
// 对于的xy坐标是文本左下角的坐标
canvas.drawText(string, 10, 100, paint);
//得到所画字符串的高宽
Rect rect = new Rect();
paint.getTextBounds(string, 0, string.length(), rect);
int with=rect.width();
int height=rect.height();
// 利用xy坐标和高宽得到字符在view中的矩形框
RectF rectF=new RectF();
rectF.left=10;
rectF.bottom=100;
rectF.right=rectF.left+with;
rectF.top=rectF.bottom-height;
// 得到监听view
this.rectF=rectF;
}
第二步 :生成一个自定义的监听,来监听我们自定义事件
/**
* 监听器
*
* @author WZG
*
*/
public interface PercentListener {
void clike();
}
第三步: 在view中设置一个传过来的自定义监听
/**
* 设置监听
*
* @param listener
*/
public void setPercnetListener(PercentListener listener) {
this.percentListener = listener;
}
第四步:在onTouchEvent方法中比较event的xy坐标和我们需要监听的view矩形框比较
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getX() > rectF.left && event.getX() < rectF.right
&& event.getY() > rectF.top
&& event.getY() < rectF.bottom) {
if(percentListener!=null){
percentListener.clike();
}
}
return super.onTouchEvent(event);
}
第五步:主视图中调用监听
public class MainActivity extends Activity implements PercentListener{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrViewTest view=(StrViewTest)findViewById(R.id.percent);
view.setPercnetListener(this);
}
@Override
public void clike() {
Log.e("tag", "点击了");
}
}
全部的代码:
package com.example.androidtest.activity.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.view.MotionEvent;
import android.view.View;
public class StrViewTest extends View {
/**
* 画笔
*/
private Paint paint;
/**
* 需要监听view的矩形框
*
*/
private RectF rectF;
/**
* 点击监听
*/
private PercentListener percentListener;
public StrViewTest(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint = new Paint();
// 填充消除据此
paint.setStyle(Paint.Style.FILL);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
String string = "画字符串";
// 对于的xy坐标是文本左下角的坐标
canvas.drawText(string, 10, 100, paint);
//得到所画字符串的高宽
Rect rect = new Rect();
paint.getTextBounds(string, 0, string.length(), rect);
int with=rect.width();
int height=rect.height();
// 利用xy坐标和高宽得到字符在view中的矩形框
RectF rectF=new RectF();
rectF.left=10;
rectF.bottom=100;
rectF.right=rectF.left+with;
rectF.top=rectF.bottom-height;
// 得到监听view
this.rectF=rectF;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getX() > rectF.left && event.getX() < rectF.right
&& event.getY() > rectF.top
&& event.getY() < rectF.bottom) {
if(percentListener!=null){
percentListener.clike();
}
}
return super.onTouchEvent(event);
}
/**
* 设置监听
*
* @param listener
*/
public void setPercnetListener(PercentListener listener) {
this.percentListener = listener;
}
/**
* 监听器
*
* @author WZG
*
*/
public interface PercentListener {
void clike();
}
}
0 0
- android 自定义View设置自定义监听 框架(监听自定义字符)
- Android 自定义View 分区域监听 回调
- Android 自定义view的监听事件
- android:自定义监听(简单)
- android中自定义监听
- android自定义监听
- 自定义View实现手势监听
- 自定义View及其监听事件
- 自定义监听
- Android 自定义Dialog,自定义接口监听事件。
- Android 自定义 View 中 onKeyDown监听 没反应
- Android 自定义 View 中 onKeyDown监听 没反应
- Android 自定义View 实现手势监听,左右滑动,上下滑动
- Android开发-自定义View-AndroidStudio(九)手势监听类GestureDetector
- Android增加自定义监听事件
- Android 自定义键盘输入内容监听
- 简单自定义View及触摸监听
- 监听原理----自定义监听--示例
- php如何判断当前的操作系统是linux还是windows
- 使用分层的Selenium框架进行复杂 Web 应用的自动测试
- PHP高效率写法(详解原因)
- VS开发经验
- Lua 环境
- android 自定义View设置自定义监听 框架(监听自定义字符)
- curl
- 合并百度地图静态库
- mybatis-memcached框架配置
- 和大神们学习每天一题(leetcode)-Valid Sudoku
- Android -- 小功能 仿美图秀秀(美颜相机)马赛克功能
- WITH AS StringBuilder一个小用法
- HDU2018(数学推导)
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?