个人技术博客(α)

写在前面

此次的团队项目我是被分到Android项目开发组的,因此这篇个人技术博客主要是有关在Android开发过程中遇到的难题以及一些学到的一些相关的技术。


Android Studio安装过程中遇到的问题

安装Android Studio的时候基本就是参照网上的教程啦做的,但有一个地方卡了我很久,就是程序一直卡在"Building Gradle project info"不动,分析应该是你懂得的网络问题,网上看了挺多解决办法,但都没有解决。。。。。最后是看到CSDN上一个的博客:打开gradle-wrapper.properties,复制里面的链接地址用迅雷下载得到"gradle-4.1-all.zip"然后放到指定的文件夹下。问题完美解决。


根据教程写了个监听器

package com.example.jorgezhu.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.*;
import android.view.View.OnClickListener;
import android.view.*;

public class MainActivity extends AppCompatActivity {

    private TextView textView;
    private Button button;
    private int sum=0;
    private ButtonListener buttonListener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=(TextView)findViewById(R.id.textView01);
        textView.setText("google is a great");
        button=(Button)findViewById(R.id.button01);
        buttonListener=new ButtonListener();
        button.setOnClickListener(buttonListener);
    }
    class ButtonListener implements OnClickListener{
        @Override
        public void onClick(View v){
            sum++;
            textView.setText("当前点击次数为"+sum);
        }
    }
}

关于Android6.0的获取权限问题

我做的模块需要读取相应目录下的图片,但不知道为什么一直读取不成功,后面发现好像是权限问题,百度了一晚上的如何获取读取权限都没效果,百度上基本上都是叫我在AndroidManifest里面加这句话,但是这并没有效果。后来发现Android6.0及以上的权限好像更改了,获取权限变得更为严格,不能简单地在AndroidManifest中添加一句话,最后还要执行requestPermissions()方法。这个问题足足把我拖了一晚上,真是心累啊。

实现类似StackView的图片浏览界面

看了网上的相关教程,今天终于把StackView图片浏览功能做出来了。首先定义一个主activity:PicStackViewActivity,相关代码如下:

package com.example.mcjproject;

import android.Manifest;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.StackView;
import android.widget.TextView;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;

public class PicStackViewActivity extends AppCompatActivity {
    private StackView stackView;
    private List<String> images = new ArrayList<>();
    private ImageAdapter imageAdapter;
    private TextView textView;
    private Timer down;
    private Timer timerup;
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.pic_view);
        stackView = (StackView) findViewById(R.id.stackview);
        textView = (TextView) findViewById(R.id.textview);
        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},140);
        images=getPictures(Environment.getExternalStorageDirectory()+"/Download");
        imageAdapter = new ImageAdapter(images, this);
        stackView.setAdapter(imageAdapter);
        stackView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                textView.setText("第"+(position+1)+"个杨幂");
            }
        });
    }

    public List<String> getPictures(final String strPath) {
        List<String> list = new ArrayList<String>();
        File file = new File(strPath);
        /*if(file.canRead())
        {
            Log.d("hello","canread");
        }*/
        File[] allfiles = file.listFiles();
        if (allfiles == null) {
            return null;
        }
        for(int k = 0; k < allfiles.length; k++) {
            final File fi = allfiles[k];
            if(fi.isFile()) {
                int idx = fi.getPath().lastIndexOf(".");
                if (idx <= 0) {
                    continue;
                }
                String suffix = fi.getPath().substring(idx);
                if (suffix.toLowerCase().equals(".jpg") ||
                        suffix.toLowerCase().equals(".jpeg") ||
                        suffix.toLowerCase().equals(".bmp") ||
                        suffix.toLowerCase().equals(".png") ||
                        suffix.toLowerCase().equals(".gif") ) {
                    list.add(fi.getPath());
                }
            }
        }
        return list;
    }

}

然后定义一个图像适配器类ImageAdaper,代码如下:

package com.example.mcjproject;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

import java.util.List;

/**
 * Created by JorgeZhu on 2017/11/12.
 */

public class ImageAdapter extends BaseAdapter {
    private List<String> mImages;
    private Context mContext;
    public ImageAdapter(List<String> mImages,Context context){
        this.mImages = mImages;
        mContext = context;
    }
    @Override
    public int getCount() {
        return mImages.size();
    }

    @Override
    public Object getItem(int position) {
        return mImages.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView = new ImageView(mContext);
        Bitmap bm=null;
        bm = BitmapFactory.decodeFile(mImages.get(position));
        imageView.setImageBitmap(bm);
        //imageView.setImageResource(mImages.get(position));
        return imageView;
    }
}

最后是一个布局文件pic_view.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:orientation="vertical"
    tools:context="com.example.mcjproject.PicStackViewActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="25sp"
            android:textColor="#ff0000"
            android:text="当前位置"
            />
   </LinearLayout>

    <StackView
        android:id="@+id/stackview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:loopViews="false"
        />
</LinearLayout>

关于如何导入github上开源项目的library的记录

  • 1.将github上项目的library下载下来。
  • 2.Android Studio上选择import module并选中要导入的library路径
  • 3.将打开刚导入的library,再打开src文件夹下的build.gradle
  • 4.将"apply from........"注释掉
  • 5.修改dependencies下的版本和自己的项目对应
  • 6.修改minSdkVersion和targetSdkVersion和自己的项目对应
posted on 2017-11-09 23:24  JorgeZhu  阅读(303)  评论(2编辑  收藏  举报