欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android繪制文本與圖片及動(dòng)效詳解

 更新時(shí)間:2022年12月17日 09:23:48   作者:上后左愛  
這篇文章主要介紹了Android繪制文本與圖片及動(dòng)效方法流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

繪制文本

繪制類 借助 Canvas 類進(jìn)行繪制

通過重寫View.onDraw 方法來進(jìn)行旁白描繪

package com.mingrisoft;
import android.app.Fragment;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Shader;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FrameLayout fragment = (FrameLayout) findViewById(R.id.frameLayout);  //獲取幀布局管理器
        fragment.addView(new MyView(this));  //將自定義視圖的內(nèi)部類添加到布局管理器中
    }
    private class MyView extends View {
        public MyView(Context context) {
            super(context);
        }
        @Override
        protected void onDraw(Canvas canvas) {  //重寫onDraw()方法
            Paint paint = new Paint();           //定義一個(gè)默認(rèn)的畫筆
            //線性漸變
            Shader shader = new LinearGradient(0, 0, 100, 100,
                    Color.RED, Color.GREEN, Shader.TileMode.MIRROR);
            paint.setShader(shader);                            //為畫筆設(shè)置漸變器
            canvas.drawRect(10, 10, 280, 150, paint);                //繪制矩形
            super.onDraw(canvas);
        }
    }
}

繪制圖片

創(chuàng)建位圖對(duì)象, JAVA 中bitmap 表示位圖對(duì)象

創(chuàng)建位圖對(duì)象 兩種方式:

BitMapFactory :

  • 1. 通過圖片文件創(chuàng)建
  • 2. 通過輸入流創(chuàng)建

BitMap類挖取一塊圖像創(chuàng)建,將源位圖縮放生成,使用顏色數(shù)組創(chuàng)建

BitMapFactory:

1.decodeFile,

2.decodeResource,

3.decodeStream

訪問SDK資源需要在Mainiefiest.xml 配置訪問權(quán)限 

<uses-premission android:name="android.permission.READ_EXTERNAL_STOTAHE">

同時(shí)在Android 上配置訪問權(quán)限

package com.example.myapplication;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.FrameLayout;
import androidx.appcompat.app.AppCompatActivity;
/**
  * 手勢(shì)方式滑動(dòng)動(dòng)畫
 */
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FrameLayout frameLayout= (FrameLayout) findViewById(R.id.frameLayout);  //獲取幀布局管理器
        frameLayout.addView(new MyView(this));  //將自定義視圖的內(nèi)部類添加到布局管理器中
    }
    }
    class MyView extends View {
        public MyView(Context context) {
            super(context);
        }
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            // 獲取SDK上 圖片繪制
            String path  = Environment.getExternalStorageDirectory() + "/snail.png";
            Bitmap bitmap = BitmapFactory.decodeFile(path);
            //通過 canvas 類 繪制圖片
            Paint paint = new Paint(); //定義
            canvas.drawBitmap(bitmap,150,150, paint);
            // 從圖像中挖取一小片 bitMap 類 的 createBitMap(截取一小塊), compress(壓縮)
            // 從原始圖像挖取小部分
            Bitmap bitmap1 = Bitmap.createBitmap(bitmap,23,89,150,168);
            canvas.drawBitmap(bitmap1,270,50, paint);
        }
    }

繪制路徑

  • 通過繪制路徑
  • 通過繪制路徑的文字
package com.example.myapplication;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import androidx.appcompat.app.AppCompatActivity;
/**
  *
 */
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FrameLayout frameLayout= (FrameLayout) findViewById(R.id.frameLayout);  //獲取幀布局管理器
        frameLayout.addView(new MyView(this));  //將自定義視圖的內(nèi)部類添加到布局管理器中
    }
    }
    /**
     *  繪制路徑
     * */
    class MyView extends View {
        public MyView(Context context) {
            super(context);
        }
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            Paint paint = new Paint();
            paint.setAntiAlias(true) ; // 定義抗鋸齒
            paint.setColor(0xFF0000FF);
            paint.setStyle(Paint.Style.STROKE); // 設(shè)置樣式為描邊
            Path path = new Path();
            // 最后一個(gè)參數(shù)環(huán)按照 順時(shí)針還是
            path.addCircle(150,100,50,Path.Direction.CW);
          //  canvas.drawPath(path,paint);
            canvas.drawTextOnPath("活著就是為了修改時(shí)間", path,0,0,paint);
        }
    }

逐幀動(dòng)畫

創(chuàng)建動(dòng)畫資源文件 在drawable 目錄下面

使用 animation-list
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/img001" android:duration="60"/>
    <item android:drawable="@drawable/img002" android:duration="60"/>
    <item android:drawable="@drawable/img003" android:duration="60"/>
    <item android:drawable="@drawable/img004" android:duration="60"/>
    <item android:drawable="@drawable/img005" android:duration="60"/>
    <item android:drawable="@drawable/img006" android:duration="60"/>
</animation-list>

MainActivity 獲取AnminationDrawable 方法設(shè)置動(dòng)態(tài)圖逐幀播放

package com.example.myapplication;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
/**
  *
 */
public class MainActivity extends AppCompatActivity {
    private boolean flag = true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LinearLayout linearLayout= (LinearLayout) findViewById(R.id.linearLayout); //獲取布局管理器
        //獲取AnimationDrawable對(duì)象
        final AnimationDrawable anim = (AnimationDrawable) linearLayout.getBackground();
        linearLayout.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                if(flag){
                    anim.start();
                    flag = false;
                }else{
                    anim.stop();
                    flag = true;
                }
            }
        });
    }
    }

補(bǔ)間動(dòng)畫

  • 通過手勢(shì)滑動(dòng)查看相片的手機(jī)相冊(cè)
  • 創(chuàng)建一個(gè)動(dòng)畫資源
參考手勢(shì)時(shí)候 設(shè)置動(dòng)畫資源文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<alpha android:fromAlpha="0"
	    android:toAlpha="1"
	    android:duration="4000"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<alpha android:fromAlpha="1"
	    android:toAlpha="0"
	    android:duration="2000"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0"
        android:duration="2000"></scale>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.0"
        android:toYScale="0.0"
        android:duration="2000"></scale>
</set>
  • 定義并且初始化動(dòng)畫數(shù)組
  • 指定切換的動(dòng)畫效果
package com.example.myapplication;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
    ViewFlipper flipper; //定義ViewFlipper
    GestureDetector detector; //定義手勢(shì)檢測(cè)器
    Animation[] animation = new Animation[4];//定義動(dòng)畫數(shù)組,為ViewFlipper指定切換動(dòng)畫
    final int distance = 50; //定義手勢(shì)動(dòng)作兩點(diǎn)之間最小距離
    //定義圖片數(shù)組
    private int[] images = new int[]{R.drawable.img01, R.drawable.img02, R.drawable.img03,
            R.drawable.img04, R.drawable.img05, R.drawable.img06, R.drawable.img07, R.drawable.img08,
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        detector = new GestureDetector(this, this); //創(chuàng)建手勢(shì)檢測(cè)器
        flipper = (ViewFlipper) findViewById(R.id.flipper); //獲取ViewFlipper
        for (int i = 0; i < images.length; i++) {
            ImageView imageView = new ImageView(this);
            imageView.setImageResource(images[i]);
            flipper.addView(imageView); //加載圖片
        }
        //初始化動(dòng)畫數(shù)組
        animation[0] = AnimationUtils.loadAnimation(this, R.anim.anim_alpha_in);     //淡入動(dòng)畫
        animation[1] = AnimationUtils.loadAnimation(this, R.anim.anim_alpha_out);      //淡出動(dòng)畫
        animation[2] = AnimationUtils.loadAnimation(this, R.anim.anim_scale_in);      //放大進(jìn)入動(dòng)畫
        animation[3] = AnimationUtils.loadAnimation(this, R.anim.anim_scale_out);  //縮小退出動(dòng)畫
    }
    @Override
    public boolean onDown(MotionEvent e) {
        return false;
    }
    @Override
    public void onShowPress(MotionEvent e) {
    }
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        return false;
    }
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        return false;
    }
    @Override
    public void onLongPress(MotionEvent e) {
    }
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        /*
        如果第一個(gè)觸點(diǎn)事件的X坐標(biāo)到第二個(gè)觸點(diǎn)事件的X坐標(biāo)的距離超過distance就是從右向左滑動(dòng)
         */
        if (e1.getX() - e2.getX() > distance) {
            //為flipper設(shè)置切換的動(dòng)畫效果
            flipper.setInAnimation(animation[0]);
            flipper.setOutAnimation(animation[1]);
            flipper.showPrevious();
            return true;
            /*
            如果第二個(gè)觸點(diǎn)事件的X坐標(biāo)到第一個(gè)觸點(diǎn)事件的X坐標(biāo)的距離超過distance就是從左向右滑動(dòng)
             */
        } else if (e2.getX() - e1.getX() > distance) {
            //為flipper設(shè)置切換的動(dòng)畫
            flipper.setInAnimation(animation[2]);
            flipper.setOutAnimation(animation[3]);
            flipper.showNext();
            return true;
        }
        return false;
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //將該Activity上的觸碰事件交給GestureDetector處理
        return detector.onTouchEvent(event);
    }
}

到此這篇關(guān)于Android繪制文本與圖片及動(dòng)效詳解的文章就介紹到這了,更多相關(guān)Android繪制文本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論