1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android开发-自定义View-AndroidStudio(二十八)缩放的View

Android开发-自定义View-AndroidStudio(二十八)缩放的View

时间:2021-02-18 03:36:49

相关推荐

Android开发-自定义View-AndroidStudio(二十八)缩放的View

转载请注明出处:/iwanghang/

觉得博文有用,请点赞,请评论,请关注,谢谢!~

继续上一篇博文,移动的View,我们来一下自定义View如何缩放:

老规矩,先上GIF动态图,看个效果,如果符合你的项目或者确定你要了解的内容,再往下看吧:

MainActivity.java:

package com.iwanghang.mannequindemo;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;public class MainActivity extends Activity implements View.OnClickListener{private MannequinView mannequinView;private int x = 0;private int y = 0;private float z = 1;private int distance = 20;private float multiple = 0.5f;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mannequinView = (MannequinView) findViewById(R.id.mannequinView);findViewById(R.id.up).setOnClickListener(this);findViewById(R.id.down).setOnClickListener(this);findViewById(R.id.left).setOnClickListener(this);findViewById(R.id.right).setOnClickListener(this);findViewById(R.id.big).setOnClickListener(this);findViewById(R.id.small).setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.up:y-=distance;mannequinView.setXY(x,y);Log.v("ceshi","setXY---up");break;case R.id.down:y+=distance;mannequinView.setXY(x,y);Log.v("ceshi","setXY---down");break;case R.id.left:x-=distance;mannequinView.setXY(x,y);Log.v("ceshi","setXY---left");break;case R.id.right:x+=distance;mannequinView.setXY(x,y);Log.v("ceshi","setXY---right");break;case R.id.big:z+=multiple;mannequinView.setZone(z);Log.v("ceshi","set---big");break;case R.id.small:z-=multiple;mannequinView.setZone(z);Log.v("ceshi","set---small");break;}}}

MannequinView.java:

package com.iwanghang.mannequindemo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.util.Log;import android.view.View;public class MannequinView extends View {private int x = 0;private int y = 0;private float z = 1;public MannequinView(Context context, AttributeSet attrs) {super(context, attrs);}public MannequinView(MainActivity mainActivity) {super(mainActivity);}// 当Android系统需要绘制一个View对象时,就会调用该对象的onDraw@Overrideprotected void onDraw(Canvas canvas) {Paint paint = new Paint();paint.setColor(Color.GRAY);paint.setStrokeWidth((float) 3.0); // 线宽paint.setAntiAlias(true); // 抗锯齿//canvas.drawLine(0,0,200,200,paint);String[] pointArray;// 头 第一条线String point1 = "523,169";String point2 = "540,157";String point3 = "562,152";String point4 = "584,158";String point5 = "600,171";pointArray = new String[]{point1,point2,point3,point4,point5};drawMyLines(pointArray,canvas,paint);// 头 第二条线String point6 = "512,187";String point7 = "523,169";String point8 = "540,162";String point9 = "562,158";String point10 = "584,162";String point11 = "600,171";String point12 = "611,187";pointArray = new String[]{point6,point7,point8,point9,point10,point11,point12};drawMyLines(pointArray,canvas,paint);// 头 第三条横线String point13 = "509,207";String point14 = "509,193";String point15 = "512,187";String point16 = "520,181";String point17 = "538,174";String point18 = "562,171";String point19 = "586,174";String point20 = "603,181";String point21 = "611,187";String point22 = "613,192";String point23 = "615,211";pointArray = new String[]{point13,point14,point15,point16,point17,point18,point19,point20,point21,point22,point23};drawMyLines(pointArray,canvas,paint);// 头 第四条横线String point24 = "509,248";String point25 = "506,210";String point26 = "518,199";String point27 = "535,192";String point28 = "561,190";String point29 = "589,192";String point30 = "607,200";String point301 = "615,211";String point31 = "618,216";String point32 = "615,239";pointArray = new String[]{point24,point25,point26,point27,point28,point29,point30,point301,point31,point32};drawMyLines(pointArray,canvas,paint);// 头 第五条横线String point33 = "514,261";String point34 = "509,248";String point35 = "510,229";String point36 = "518,221";String point37 = "535,214";String point38 = "562,213";String point39 = "589,214";String point40 = "605,220";String point41 = "613,228";String point42 = "615,239";String point43 = "609,262";pointArray = new String[]{point33,point34,point35,point36,point37,point38,point39,point40,point41,point42,point43};drawMyLines(pointArray,canvas,paint);// 头 第六条横线String point44 = "525,292";String point45 = "514,261";String point46 = "523,249";String point47 = "539,246";String point48 = "562,246";String point49 = "585,246";String point50 = "600,249";String point51 = "609,262";String point52 = "599,293";pointArray = new String[]{point44,point45,point46,point47,point48,point49,point50,point51,point52};drawMyLines(pointArray,canvas,paint);// 头 第七条横线 - 起点终点与第一条线相同String point53 = "523,169";String point54 = "521,181";String point55 = "518,199";String point56 = "518,221";String point57 = "523,249";String point58 = "533,274";String point59 = "562,287";String point60 = "592,274";String point61 = "600,249";String point62 = "606,221";String point63 = "607,200";String point64 = "603,180";String point65 = "600,171";pointArray = new String[]{point53,point54,point55,point56,point57,point58,point59,point60,point61,point62,point63,point64,point65};drawMyLines(pointArray,canvas,paint);// 头 第八条横线 - 起点终点与第三条线相同String point66 = "509,207";String point67 = "510,229";String point68 = "517,257";String point69 = "529,283";String point70 = "545,295";String point71 = "562,299";String point72 = "580,295";String point73 = "594,283";String point74 = "607,257";String point75 = "613,228";String point76 = "615,211";pointArray = new String[]{point66,point67,point68,point69,point70,point71,point72,point73,point74,point75,point76};drawMyLines(pointArray,canvas,paint);// 头 第九条横线 - 起点终点与第六条线相同String point77 = "525,292";String point78 = "545,306";String point79 = "562,309";String point80 = "580,306";String point81 = "599,293";pointArray = new String[]{point77,point78,point79,point80,point81};drawMyLines(pointArray,canvas,paint);// 头 第10条横线 - 第七条的点6 第六条的起点String point82 = "533,274";String point83 = "525,292";pointArray = new String[]{point82,point83};drawMyLines(pointArray,canvas,paint);// 头 第11条横线 - 第七条的点8 第八条的点8 第六条的终点String point84 = "592,274";String point85 = "594,283";String point86 = "599,293";pointArray = new String[]{point84,point85,point86};drawMyLines(pointArray,canvas,paint);super.onDraw(canvas);}private void drawMyLines(String[] pointArray, Canvas canvas, Paint paint) {for(int i=0;i<pointArray.length;i++){if (i+1<pointArray.length){drawMyLine(pointArray[i],pointArray[i+1],canvas,paint);}}}private void drawMyLine(String point1, String point2, Canvas canvas, Paint paint) {String[] point = (point1 + "," + point2).split(",");// canvas.drawLine(//x + Float.valueOf(point[0]),//y + Float.valueOf(point[1]),//x + Float.valueOf(point[2]),//y + Float.valueOf(point[3]),paint);Log.v("ceshi", String.valueOf((y + Float.valueOf(point[1])) * z) + " ---" + z);if (z > 1.0){Log.v("ceshi", "z > 1.0");canvas.drawLine((x + Float.valueOf(point[0])) * z - (z - 1) * 523,(y + Float.valueOf(point[1])) * z - (z - 1) * 169,(x + Float.valueOf(point[2])) * z - (z - 1) * 523,(y + Float.valueOf(point[3])) * z - (z - 1) * 169, paint);}else {canvas.drawLine((x + Float.valueOf(point[0])) * z,(y + Float.valueOf(point[1])) * z,(x + Float.valueOf(point[2])) * z,(y + Float.valueOf(point[3])) * z,paint);}}// 移动public void setXY(int x1, int y1) {x = x1;y = y1;invalidate(); // onDraw()}// 缩放public void setZone(float z1) {z = z1;invalidate(); // onDraw()}}

activity_main.xml:

<LinearLayoutandroid:orientation="vertical"xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><com.iwanghang.mannequindemo.MannequinViewandroid:id="@+id/mannequinView"android:layout_weight="1"android:layout_width="match_parent"android:layout_height="match_parent" /><LinearLayoutandroid:layout_weight="7"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/big"android:text="+"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/small"android:text="-"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout><LinearLayoutandroid:layout_weight="7"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/up"android:text="↑"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/down"android:text="↓"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/left"android:text="←"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/right"android:text="→"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout></LinearLayout>

转载请注明出处:/iwanghang/

欢迎移动开发爱好者交流

沈阳或周边城市公司有意开发Android,请与我联系

联系方式

微信:iwanghang

QQ:413711276

邮箱:iwanghang@

觉得博文有用,请点赞,请评论,请关注,谢谢!~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。