全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android中TextView和ImageView实现倾斜效果

TextView倾斜:

想做一个倾斜的TextView,想海报上显示的那样 ,在网上找例子一直不能实现,看了看TextView源码,发现很简单,为方便像我一样糊涂的孩纸,贴出来了.

首先需要先自定义一个TextView

public class MyTextView extends TextView{ 
 
  public MyTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
  } 
 
  @Override 
  protected void onDraw(Canvas canvas) { 
    //倾斜度45,上下左右居中 
    canvas.rotate(-45, getMeasuredWidth()/2, getMeasuredHeight()/2); 
    super.onDraw(canvas); 
  } 
   
} 

xml文件中添加上这个MyTextView

<com.peace.test.incline_textview.MyTextView 
    android:layout_width="100dip" 
    android:layout_height="100dip" 
    android:gravity="center" 
    android:text="@string/hello_world"/> 

ImageView倾斜:

MainActivity如下:

import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.ImageView; 
import android.app.Activity; 
import android.graphics.Matrix; 
/** 
 * Demo描述: 
 * 利用mImageView.setImageMatrix(matrix)实现 
 * 图片的平移,缩放,旋转,倾斜以及对称 
 * 
 * 参考资料: 
 * 0 http://blog.csdn.net/pathuang68/article/details/6991988 
 * 1 http://blog.csdn.net/mingli198611/article/details/7830633 
 * 
 * Thank you very much 
 */ 
public class MainActivity extends Activity { 
 private TestMatrixImageView mTestMatrixImageView; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  mTestMatrixImageView=new TestMatrixImageView(MainActivity.this); 
  mTestMatrixImageView.setScaleType(ImageView.ScaleType.MATRIX);//?? 
  mTestMatrixImageView.setOnTouchListener(new TouchListenerImpl()); 
  setContentView(mTestMatrixImageView); 
 } 
  
 private class TouchListenerImpl implements OnTouchListener{ 
  @Override 
  public boolean onTouch(View v, MotionEvent event) { 
   if (event.getAction()==MotionEvent.ACTION_UP) { 
    //1 测试平移 
    testTranslate(); 
    //2 测试围绕图片中心点旋转 
    //testRotate(); 
    //3 测试围绕原点旋转后平移 
    //testRotateAndTranslate(); 
    //4 缩放 
    //testScale(); 
    //5 水平倾斜 
    //testSkewX(); 
    //6 垂直倾斜 
    //testSkewY(); 
    //7 水平且垂直倾斜 
    //testSkewXY(); 
    //8 水平对称 
    //testSymmetryX(); 
    //9 垂直对称 
    //testSymmetryY(); 
    //10 关于X=Y对称 
    //testSymmetryXY(); 
   } 
   return true; 
  } 
   
 } 
  
 //平移 
 private void testTranslate(){ 
  Matrix matrix=new Matrix(); 
  int width=mTestMatrixImageView.getBitmap().getWidth(); 
  int height=mTestMatrixImageView.getBitmap().getHeight(); 
  matrix.postTranslate(width, height); 
  mTestMatrixImageView.setImageMatrix(matrix); 
  showMatrixEveryValue(matrix); 
 } 
 //围绕图片中心点旋转 
 private void testRotate(){ 
  Matrix matrix=new Matrix(); 
  int width=mTestMatrixImageView.getBitmap().getWidth(); 
  int height=mTestMatrixImageView.getBitmap().getHeight(); 
  matrix.postRotate(45f, width/2, height/2); 
  matrix.postTranslate(width, height); 
  mTestMatrixImageView.setImageMatrix(matrix); 
  showMatrixEveryValue(matrix); 
 } 
  
 //围绕原点旋转后平移 
 //注意以下三行代码的执行顺序: 
 //matrix.setRotate(45f); 
 //matrix.preTranslate(-width, -height); 
 //matrix.postTranslate(width, height); 
 //先执行matrix.preTranslate(-width, -height); 
 //后执行matrix.setRotate(45f); 
 //再执行matrix.postTranslate(width, height); 
 private void testRotateAndTranslate() { 
  Matrix matrix = new Matrix(); 
  int width = mTestMatrixImageView.getBitmap().getWidth(); 
  int height = mTestMatrixImageView.getBitmap().getHeight(); 
  matrix.setRotate(45f); 
  matrix.preTranslate(-width, -height); 
  matrix.postTranslate(width, height); 
  mTestMatrixImageView.setImageMatrix(matrix); 
  showMatrixEveryValue(matrix); 
 } 
  
 //缩放 
 private void testScale() { 
  Matrix matrix = new Matrix(); 
  matrix.setScale(0.5f, 0.5f); 
  mTestMatrixImageView.setImageMatrix(matrix); 
  showMatrixEveryValue(matrix); 
 } 
  
 //水平倾斜 
 private void testSkewX() { 
  Matrix matrix = new Matrix(); 
  matrix.setSkew(0.5f, 0); 
  mTestMatrixImageView.setImageMatrix(matrix); 
  showMatrixEveryValue(matrix); 
 } 
 
 // 垂直倾斜 
 private void testSkewY() { 
  Matrix matrix = new Matrix(); 
  matrix.setSkew(0, 0.5f); 
  mTestMatrixImageView.setImageMatrix(matrix); 
  showMatrixEveryValue(matrix); 
 } 
  
 // 水平且垂直倾斜 
 private void testSkewXY() { 
  Matrix matrix = new Matrix(); 
  matrix.setSkew(0.5f, 0.5f); 
  mTestMatrixImageView.setImageMatrix(matrix); 
  showMatrixEveryValue(matrix); 
 } 
  
 // 水平对称--图片关于X轴对称 
 private void testSymmetryX() { 
  Matrix matrix = new Matrix(); 
  int height = mTestMatrixImageView.getBitmap().getHeight(); 
  float matrixValues[] = { 1f, 0f, 0f, 0f, -1f, 0f, 0f, 0f, 1f }; 
  matrix.setValues(matrixValues); 
  //若是matrix.postTranslate(0, height); 
  //表示将图片上下倒置 
  matrix.postTranslate(0, height*2); 
  mTestMatrixImageView.setImageMatrix(matrix); 
  showMatrixEveryValue(matrix); 
 } 
  
 // 垂直对称--图片关于Y轴对称 
 private void testSymmetryY() { 
  Matrix matrix = new Matrix(); 
  int width=mTestMatrixImageView.getBitmap().getWidth(); 
  float matrixValues[] = {-1f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 1f}; 
  matrix.setValues(matrixValues); 
  //若是matrix.postTranslate(width,0); 
  //表示将图片左右倒置 
  matrix.postTranslate(width*2, 0); 
  mTestMatrixImageView.setImageMatrix(matrix); 
  showMatrixEveryValue(matrix); 
 
 } 
 
 // 关于X=Y对称--图片关于X=Y轴对称 
 private void testSymmetryXY() { 
  Matrix matrix = new Matrix(); 
  int width = mTestMatrixImageView.getBitmap().getWidth(); 
  int height = mTestMatrixImageView.getBitmap().getHeight(); 
  float matrixValues[] = { 0f, -1f, 0f, -1f, 0f, 0f, 0f, 0f, 1f }; 
  matrix.setValues(matrixValues); 
  matrix.postTranslate(width+height, width+height); 
  mTestMatrixImageView.setImageMatrix(matrix); 
  showMatrixEveryValue(matrix); 
 } 
  
 //获取变换矩阵Matrix中的每个值 
 private void showMatrixEveryValue(Matrix matrix){ 
  float matrixValues []=new float[9]; 
  matrix.getValues(matrixValues); 
  for (int i = 0; i <3; i++) { 
   String valueString=""; 
   for (int j = 0; j < 3; j++) { 
    valueString=matrixValues[3*i+j]+""; 
    System.out.println("第"+(i+1)+"行的第"+(j+1)+"列的值为"+valueString); 
   } 
  } 
 } 
 
} 

TestMatrixImageView如下:

package cn.testmatrix; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Matrix; 
import android.widget.ImageView; 
/** 
 * 总结: 
 * 在MainActivity中执行: 
 * mTestMatrixImageView.setImageMatrix(matrix); 
 * 时此自定义View会先调用setImageMatrix(Matrix matrix) 
 * 然后调用onDraw(Canvas canvas) 
 */ 
public class TestMatrixImageView extends ImageView{ 
 private Matrix mMatrix; 
 private Bitmap mBitmap; 
 public TestMatrixImageView(Context context) { 
  super(context); 
  mMatrix=new Matrix(); 
  mBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.icon); 
 } 
 @Override 
 protected void onDraw(Canvas canvas) { 
  System.out.println("---> onDraw"); 
  //画原图 
  canvas.drawBitmap(mBitmap, 0, 0, null); 
  //画经过Matrix变化后的图 
  canvas.drawBitmap(mBitmap, mMatrix, null); 
  super.onDraw(canvas); 
 } 
 @Override 
 public void setImageMatrix(Matrix matrix) { 
  System.out.println("---> setImageMatrix"); 
  this.mMatrix.set(matrix); 
  super.setImageMatrix(matrix); 
 } 
  
 public Bitmap getBitmap(){ 
  System.out.println("---> getBitmap"); 
  return mBitmap; 
 } 
 
} 

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" 
 > 
 
 <TextView 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content" 
  android:text="@string/hello_world" /> 
 
</RelativeLayout> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# textView  # imageView  # 倾斜  # Android TextView实现带链接文字事件监听的三种常用方式示例  # Android TextView对齐的两种方法  # Android实现带动画效果的可点击展开TextView  # android TextView实现跑马灯效果  # Android中TextView显示圆圈背景或设置圆角的方法  # Android TextView 去掉自适应默认的fontpadding的实现方法  # 中心点  # 自定义  # 来了  # 看了看  # 上下左右  # 很简单  # 参考资料  # 想做  # 贴出  # 值为  # 大家多多  # 会先  # 像我一样  # 在网上  # 为方便  # OnTouchListener  # os  # Bundle  # View  # MotionEvent 


相关文章: 济南网站制作的价格,历城一职专官方网站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  营销式网站制作方案,销售哪个网站招聘效果最好?  如何在腾讯云服务器快速搭建个人网站?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  创业网站制作流程,创业网站可靠吗?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  建站为何优先选择香港服务器?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  如何快速生成专业多端适配建站电话?  建站org新手必看:2024最新搭建流程与模板选择技巧  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  电商网站制作公司有哪些,1688网是什么意思?  建站之星安装需要哪些步骤及注意事项?  如何在香港免费服务器上快速搭建网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  jQuery 常见小例汇总  电商平台网站制作流程,电商网站如何制作?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  网站制作壁纸教程视频,电脑壁纸网站?  制作电商网页,电商供应链怎么做?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何在阿里云ECS服务器部署织梦CMS网站?  建站之星如何通过成品分离优化网站效率?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  C#如何在一个XML文件中查找并替换文本内容  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  大同网页,大同瑞慈医院官网?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  建站之星图片链接生成指南:自助建站与智能设计教程  移民网站制作流程,怎么看加拿大移民官网?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  网站企业制作流程,用什么语言做企业网站比较好?  如何配置WinSCP新建站点的密钥验证步骤?  北京专业网站制作设计师招聘,北京白云观官方网站?  如何通过山东自助建站平台快速注册域名?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  h5在线制作网站电脑版下载,h5网页制作软件?  c++ stringstream用法详解_c++字符串与数字转换利器  如何撰写建站申请书?关键要点有哪些?  如何通过商城自助建站源码实现零基础高效建站?  高防服务器如何保障网站安全无虞?  建站之星如何实现PC+手机+微信网站五合一建站?  如何快速建站并高效导出源代码?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。