常用控件(三)

进度条和抠图以及获取手机内存卡的图片

先写3个xml文件

1.


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="<"
            android:onClick="before"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="+"
            android:onClick="add"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="-"
            android:onClick="delete"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=">"
            android:onClick="next"
            />
    LinearLayout>

    <ImageView
        android:layout_width="300dp"
        android:layout_height="400dp"
        android:id="@+id/iv_girl_image"
        android:background="#ffff00"
        />
    <ImageView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:id="@+id/iv_girl_new"
        />

LinearLayout>

2.


<LinearLayout 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"
    tools:context="com.zking.g160618_android06_widget.MainActivity">
    <ImageView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:background="#00ff00"
        android:scaleType="centerInside"
        android:src="@drawable/largeimage"
        />
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/largeimage"
        />
LinearLayout>

3.


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv_progress_num"
        android:textSize="30sp"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="start"
        android:text="开始"
        />


LinearLayout>

下面是java代码

首先是抠图,就是图片局部放大

package com.zking.g160618_android06_widget;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;

/**
 * @author Zking-Snail
 * @time 2017/6/9 11:40
 * @Version ${REV}
 */
public class GirlActivity extends AppCompatActivity{

    //定义图片数组
    private int images[]={R.drawable.s1,R.drawable.s2,R.drawable.s3,R.drawable.s4,R.drawable.s5};
    private ImageView iv_girl_image;
    private int currentIndex=0;
    private int currentAlpha=255;
    private File[] files;
    private ImageView iv_girl_new;
    private Bitmap bitmap;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_girl);
        iv_girl_image = (ImageView) findViewById(R.id.iv_girl_image);
        iv_girl_new = (ImageView) findViewById(R.id.iv_girl_new);

        //获取手机内存卡中的图片
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            //获取内存卡的路径
            String sdcardPath=Environment.getExternalStorageDirectory().getAbsolutePath();
            File file=new File(sdcardPath+"/images");
            files = file.listFiles();
        }


        //通过代码指定第一张默认图片
        //iv_girl_image.setImageResource(images[currentIndex]);
        bitmap = BitmapFactory.decodeFile(files[currentIndex].getAbsolutePath());
        iv_girl_image.setImageBitmap(bitmap);


        //设置透明度
        iv_girl_image.setImageAlpha(currentAlpha);


        //给ImageView设置触摸事件
        iv_girl_image.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {

                //获取手指的坐标
                float x=motionEvent.getX();
                float y=motionEvent.getY();

                //抠图
                Bitmap newBitmap=Bitmap.createBitmap(bitmap,(int)x,(int)y,30,30);
                iv_girl_new.setImageBitmap(newBitmap);

                return true;
            }
        });





    }
    public void before(View view){
        currentIndex--;
        //Log.i("test","当前值:"+currentIndex);
        if(currentIndex<0){
            currentIndex=0;
            Toast.makeText(GirlActivity.this, "兄弟,乖乖充会员吧!", Toast.LENGTH_SHORT).show();
        }
        //iv_girl_image.setImageResource(images[currentIndex]);
        bitmap=BitmapFactory.decodeFile(files[currentIndex].getAbsolutePath());
        iv_girl_image.setImageBitmap(bitmap);
    }
    public void next(View view){
        currentIndex++;
        //Log.i("test","当前值:"+currentIndex);
        if(currentIndex>=files.length){
            currentIndex=files.length-1;
            Toast.makeText(GirlActivity.this, "兄弟,请冲会员,查看更多", Toast.LENGTH_SHORT).show();
        }
        //iv_girl_image.setImageResource(images[currentIndex]);
        bitmap=BitmapFactory.decodeFile(files[currentIndex].getAbsolutePath());
        iv_girl_image.setImageBitmap(bitmap);
    }

    public void add(View view){
        currentAlpha+=20;
        if(currentAlpha>255){
            currentAlpha=255;
            Toast.makeText(GirlActivity.this, "兄弟,很高清了", Toast.LENGTH_SHORT).show();
        }
        iv_girl_image.setImageAlpha(currentAlpha);
    }
    public void delete(View view){
        currentAlpha-=20;
        if(currentAlpha<0){
            currentAlpha=0;
            Toast.makeText(GirlActivity.this, "兄弟,没得看了", Toast.LENGTH_SHORT).show();
        }
        iv_girl_image.setImageAlpha(currentAlpha);
    }

}

获取手机内存卡的路径还需要在 AndroidManifest.xml写代码


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.a_02.a_06">
    
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">uses-permission>


    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true" android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">

        activity>

        <activity android:name=".test">

        activity>

      <activity android:name=".work">
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />

              <category android:name="android.intent.category.LAUNCHER" />
          intent-filter>
      activity>
    application>

manifest>

然后到进度条了

package com.zking.g160618_android06_widget;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;

/**
 * @author Zking-Snail
 * @time 2017/6/11 11:11
 * @Version ${REV}
 */
public class ProgressActivity extends AppCompatActivity {

    private ProgressBar progressBar;
    private TextView tv_progress_num;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_progress);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        tv_progress_num = (TextView) findViewById(R.id.tv_progress_num);
    }

    //ANR :application not responsing应用程序无响应
    //why:因为在主线程中执行了 耗时的操作
    //how:把耗时的操作 写到子线程中
    public void start(View view){
        new MyThread().start();
    }

    Handler handler=new Handler(){
        //接受消息,并更新UI
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //接受消息
            int i=msg.what;
//            更新UI
            tv_progress_num.setText(i+"%");
        }
    };


    class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            for (int i = 0; i <=100 ; i++) {
                progressBar.setProgress(i);
                //发消息
                handler.sendEmptyMessage(i);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }




}

这里要
注意耗时的事件不要写道主线程中,会导致程序无响应

你可能感兴趣的:(安卓)