xUtils+自定义listview+绘图

来源:互联网 发布:黑客帝国矩阵革命 bt 编辑:程序博客网 时间:2024/05/23 14:03

!!!用xUitls的时候首先要把xUtils-3.3.22.jar这个jar包导到项目中,并依赖
首先要使用这个框架
这里写图片描述
因为我这里用的是gson解析json字符串的所以还需要这一步
这里写图片描述

import android.app.Application;import org.xutils.x;public class App extends Application {    @Override    public void onCreate() {        super.onCreate();        x.Ext.init(this);    }}

创建一个类,并继承Application ,在onCreate方法中写入x.Ext.init(this);就可以了

MainActivity

import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity {    private EditText name,pass;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        name= (EditText) findViewById(R.id.name);        pass= (EditText) findViewById(R.id.pass);    }    public void Click(View view) {        switch (view.getId()) {            case R.id.dl:                String s = name.getText().toString();                //判断集合里面是否存在用户名和密码                if((s.equals("admin"))){                    Intent intent=new Intent(this,Main2Activity.class);                    startActivity(intent);                    //切换Activity的动画                    overridePendingTransition(R.anim.alpha,R.anim.alpha);                }                break;            case R.id.cz:                name.setText("");                pass.setText("");//清空EditText                break;        }    }}

MainActivity里面有一个登陆(没用数据库),和两个按钮,一个登陆(点击之后跳转),一个充值(点击之后自动清空EditText)
activity_main布局

<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.zhouliu.MainActivity">    <EditText        android:layout_width="match_parent"        android:layout_height="50dp"        android:hint="请输入账号"        android:id="@+id/name"        />    <EditText        android:layout_width="match_parent"        android:layout_height="50dp"        android:hint="请输入密码"        android:id="@+id/pass"        />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="登录"        android:id="@+id/dl"        android:onClick="Click"        />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="重置"        android:id="@+id/cz"        android:onClick="Click"        /></LinearLayout>

Main2Activity

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.AbsListView;import android.widget.ListView;import android.widget.RadioGroup;import com.google.gson.Gson;import org.xutils.common.Callback;import org.xutils.http.RequestParams;import org.xutils.x;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class Main2Activity extends AppCompatActivity implements AbsListView.OnScrollListener{    private ListView lv;    private String s="http://app.vmoiver.com/apiv3/post/getPostInCate?cateid=0&p=";    int count=1;    private List<Map<String,String>> list;    boolean flag;    MyAdapter myAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);        lv= (ListView) findViewById(R.id.lv);        list=new ArrayList<>();        myAdapter= new MyAdapter(list, Main2Activity.this);        lv.setAdapter(myAdapter);        show();        lv.setOnScrollListener(this);    }    private void show() {        RequestParams params=new RequestParams(s+count);        x.http().get(params, new Callback.CommonCallback<String>() {            @Override            public void onSuccess(String s) {                Gson gson=new Gson();                User user = gson.fromJson(s, User.class);                List<Map<String,String>> list1=new ArrayList<Map<String, String>>();                for (int i=0;i<user.getData().size();i++){                    Map<String,String> map=new HashMap<String, String>();                    map.put("title",user.getData().get(i).getTitle());                    map.put("image",user.getData().get(i).getImage());                    list1.add(map);                }                list.addAll(list1);                myAdapter.notifyDataSetChanged();            }            @Override            public void onError(Throwable throwable, boolean b) {            }            @Override            public void onCancelled(CancelledException e) {            }            @Override            public void onFinished() {            }        });    }    @Override    public void onScrollStateChanged(AbsListView absListView, int i) {        if(i==SCROLL_STATE_IDLE&&flag){            count++;            show();        }    }    @Override    public void onScroll(AbsListView absListView, int i, int i1, int i2) {        if(i+i1==i2){            flag=true;        }        else {            flag=false;        }    }}

activity_main2

<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"    tools:context="com.example.zhouliu.Main2Activity">    <ListView        android:layout_width="match_parent"        android:id="@+id/lv"        android:layout_height="match_parent">    </ListView></RelativeLayout>

自定义ListView的布局item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal" android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:layout_width="100dp"        android:layout_height="100dp"        android:id="@+id/iv"        />    <TextView        android:layout_width="wrap_content"        android:layout_height="100dp"        android:id="@+id/tv"        android:text="我没过"        /></LinearLayout>

自定义Listview的适配器

import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import org.xutils.image.ImageOptions;import org.xutils.x;import java.util.List;import java.util.Map;import it.sephiroth.android.library.picasso.Picasso;/** * Created by 爸爸 on 2017/11/4. */public class MyAdapter extends BaseAdapter {    private List<Map<String,String>> list;    private Context context;    public MyAdapter(List<Map<String, String>> list, Context context) {        this.list = list;        this.context = context;    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int i) {        return list.get(i);    }    @Override    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {        Holder holder=null;        if(view==null){            holder=new Holder();            view= View.inflate(context,R.layout.item,null);            holder.iv= (ImageView) view.findViewById(R.id.iv);            holder.tv= (TextView) view.findViewById(R.id.tv);            view.setTag(holder);        }        else {            holder= (Holder) view.getTag();        }        ImageOptions imageOptions=new ImageOptions.Builder().setRadius(500).build();        x.image().bind(holder.iv,list.get(i).get("image"),imageOptions);        holder.tv.setText(list.get(i).get("title"));        return view;    }    class Holder{            TextView tv;            ImageView iv;    }}

User这里是创建一个类,然后按Alt+s出来一个框把字符串扔上去就行了

XCRoundRectImageView这个是绘图代码

import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.ImageView;/** * Created by 爸爸 on 2017/11/4. */public class XCRoundRectImageView extends ImageView {    private Paint paint;    public XCRoundRectImageView(Context context) {        super(context);    }    public XCRoundRectImageView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public XCRoundRectImageView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        paint=new Paint();    }    @Override    protected void onDraw(Canvas canvas) {        Drawable drawable=getDrawable();        if(null!=drawable){            Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();            Bitmap b=getRoundBitmap(bitmap,20);            final  Rect rectSrc=new Rect(0,0,b.getWidth(),b.getHeight());            final  Rect rectDest=new Rect(0,0,getWidth(),getHeight());            paint.reset();            canvas.drawBitmap(b,rectSrc,rectDest,paint);        }        else {            super.onDraw(canvas);        }    }    public Bitmap getRoundBitmap(Bitmap bitmap,int roundPx) {        Bitmap output=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight()        , Bitmap.Config.ARGB_8888        );        Canvas canvas=new Canvas(output);        final int color=0xff424242;        final Rect rect=new Rect(0,0,bitmap.getWidth(),bitmap.getHeight());        final RectF rectf=new RectF(rect);        paint.setAntiAlias(true);        canvas.drawARGB(0,0,0,0);        paint.setColor(color);        int x=bitmap.getWidth();        canvas.drawRoundRect(rectf,roundPx,roundPx,paint);        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));        canvas.drawBitmap(bitmap,rect,rect,paint);        return output;    }}

对了,我还写了一个Activity切换动画,需要在res里面创建一个anim文件夹在这个文件夹里创建一个xml文件
anim

<alpha    xmlns:android="http://schemas.android.com/apk/res/android"    android:fromAlpha="1"    android:toAlpha="0.1"    android:duration="3000"    android:fillAfter="true"   ></alpha>

到这里就结束了,希望能帮到大家