Android 自定义TextView实现滑动解锁高亮文字

下面一段代码给大家分享Android 自定义TextView实现滑动解锁高亮文字效果,具体代码如下所示:

public class HightLightTextView extends TextView {
  // 存储view的宽度
  private int mTextViewWidth = 0;
  // 画笔
  private Paint mPaint;
  // 线性渲染
  private LinearGradient mLinearGradient;
  // 存储变换的matrix
  private Matrix matrix;
  // 移动距离
  private int mTranslateX = 0;
  // 构造方法
  public HightLightTextView(Context context) {
    this(context, null);
  }
  public HightLightTextView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }
  public HightLightTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }
  /**
   * view的调用过程:构造方法->onFinishInflate->onSizeChanged->onDraw
   */
  @Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    // 获取view的宽度,初始化画笔等初始属性
    if (mTextViewWidth == 0) {
      mTextViewWidth = getMeasuredWidth();
      // 如果宽度大于0的话,则初始化
      if (mTextViewWidth > 0) {
        // 初始化画笔
        mPaint = getPaint();
        // 线性渲染
        mLinearGradient = new LinearGradient(0, getMeasuredHeight(), mTextViewWidth, 0,
            new int[]{0X55FFFFFF, 0XFFFFFFFF, 0X55FFFFFF},
            new float[]{0, 0.5f, 1}, Shader.TileMode.CLAMP);
        mPaint.setShader(mLinearGradient);
        matrix = new Matrix();
      }
    }
  }
  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (matrix != null) {
      mTranslateX += mTextViewWidth / 10;
      // 如果移动的距离大于两倍的宽度,则重新开始移动
      if (mTranslateX > 2 * mTextViewWidth) {
        mTranslateX = -mTextViewWidth;
      }
      // 平移matrix
      matrix.setTranslate(mTranslateX, 0);
      // 设置线性变化的matrix
      mLinearGradient.setLocalMatrix(matrix);
      // 延迟50ms重绘 (重绘时会重新调用onDraw)
      postInvalidateDelayed(50);
    }
  }
}

补充:

Android TextView指定关键字高亮显示

项目中有这个需求,网上搜了一把,方法挺多的,这里选择一个简单的,已验证可用的方法,记录下,方便以后查阅。

TextView tv = (TextView) findViewById(R.id.hello);
SpannableString s = new SpannableString(getResources().getString(R.string.linkify));
Pattern p = Pattern.compile("abc");
Matcher m = p.matcher(s);
while (m.find()) {
int start = m.start();
int end = m.end();
s.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
tv.setText(s); 

很简单,tv就是TextView控件,s是要显示的字符串,“abc”是要高亮显示的关键字。

(0)

相关推荐

  • Android模拟实现滑动解锁界面

    本文实例为大家分享了Android模拟滑动解锁界面,供大家参考,具体内容如下 实现逻辑 自定义一个view继承view类,实现里面的方法 在构造方法中加载出图片资源.在onMeasure中获取背景的宽和高作为自定义控件的宽和高 在onDraw方法中绘制出滑块,在控件的布局文件中设置控件的背景图片 设置滑块的触摸事件,分别算出当手指按下屏幕.移动,离开屏幕时滑块的位置 在移动的过程中,对滑块的位置进行限定,使滑块的位置不能超过指定的区域 在手指离开屏幕的事件中判定手指的位置,如果滑块没有到达最右边

  • 轻松实现Android自定义九宫格图案解锁

    Android实现九宫格图案解锁,自带将图案转化成数字密码的功能,代码如下: LockPatternView.java package com.jackie.lockpattern; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; import android.text.TextUtils; i

  • android 九宫格滑动解锁开机实例源码学习

    效果图由于网站占时不能上传,以后补上. NinePointLineView.java 复制代码 代码如下: package org.demo.custon_view; import org.demo.utils.MLog; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; imp

  • Android自定义滑动解锁控件使用详解

    最近的项目里用到了,在网上找不到合适的,于是自己写了个简单的,带回弹效果: 可以自定义的属性有: <!-- 滑动解锁控件 xml配置属性 --> <declare-styleable name="SlideToUnlockView"> <attr name="slideImageViewWidth" format="dimension"/><!-- 滑块宽度 --> <attr name=&q

  • Android实现九宫格解锁的方法

    相信大家都有使用九宫格解锁,比如在设置手机安全项目中,可以使用九宫格解锁,提高安全性,以及在使用支付功能的时候,为了提高安全使用九宫锁,今天就为大家介绍Android实现九宫格的方法,分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: 布局文件如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas

  • Android指纹解锁方法解析

    我先说说这两种的方式的不同之处吧 第一种: 在调动成功之后 不会让你指纹解锁 而是调转到当初你设置指纹解锁时的 手势解锁页面 第二种: 在调动成功之后,是进行指纹解锁 不调转 你直接把手指放到金属感应环 上面进行指纹验证 大家可以根据需求 自行选择 ok 那就亮代码了 第一种: xml 布局: 一个 文本显示 一个按钮(不解释) MainActivity.java源码 public class MainActivity extends FragmentActivity { Fingerprint

  • Android点亮屏幕或屏幕解锁和锁定以及其他相关权限实现代码

    1.Android屏幕常亮/点亮 复制代码 代码如下: //保持屏幕常亮 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, LOCK_TAG); mWakeLock.acquire(); 复制代码 代码如下: //释

  • Android 监听锁屏、解锁、开屏 功能代码

    1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; /** * Created by ${zyj} on 2016/6

  • android滑动解锁震动效果的开启和取消

    如果我们需要根据设置中的触摸震动开关来开启和取消滑动解锁的震动效果,就需要做以下修改了. 在LockScreen.java类中的LockScreen方法中的 复制代码 代码如下: else if (mUnlockWidget instanceof MultiWaveView) {            MultiWaveView multiWaveView = (MultiWaveView) mUnlockWidget; multiWaveView.setVibrateEnabled(Setti

  • 使用Android自定义控件实现滑动解锁九宫格

    本文概述:  滑动解锁九宫格的分析: 1.需要自定义控件: 2.需要重写事件onTouchEvent(); 3.需要给九个点设置序号和坐标,这里用Map类就行: 4.需要判断是否到滑到过九点之一,并存储滑到过的点的序号,而且需要一个方法可以返回它们,这里用List类就行: 滑动解锁当前还是比较流行的,今天写了个简单的滑动解锁九宫格的例程,分享出来让初学者看看. 我的是这样的: Demo 首先,自定义一个View /** * 九宫格 */ public class NineGridView ext

随机推荐