xUtils+自定义listview+绘图

!!!用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>

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值